[GHC] #9589: Building GHC as a cross-compiler for armhf fails with undefined reference to `dlopen', `dlerror', `dlsym'

GHC ghc-devs at haskell.org
Thu Sep 18 16:36:09 UTC 2014


#9589: Building GHC as a cross-compiler for armhf fails with undefined reference
to `dlopen', `dlerror', `dlsym'
-------------------------------------+-------------------------------------
              Reporter:  jpmasseria  |            Owner:
                  Type:  bug         |           Status:  infoneeded
              Priority:  normal      |        Milestone:
             Component:  Build       |          Version:  7.8.3
  System                             |         Keywords:
            Resolution:              |     Architecture:  Unknown/Multiple
      Operating System:  Linux       |       Difficulty:  Unknown
       Type of failure:  Building    |       Blocked By:
  GHC failed                         |  Related Tickets:
             Test Case:              |
              Blocking:              |
Differential Revisions:              |
-------------------------------------+-------------------------------------

Comment (by jpmasseria):

 Success!  I manually created the symlinks that `libc6-dev` creates between
 `/usr/lib/` to `/lib` as relative links as described in the StackOverflow
 posting you provided [http://stackoverflow.com/questions/13626726/an-
 error-building-qt-libraries-for-the-raspberry-pi] and the build completed.

 Here are the symlinks I created:


 {{{
 johnma at aspire-ubuntu:~$ ls -l rpi-toolchain/rootfs/usr/lib/arm-linux-
 gnueabihf/ | grep "../.."
 lrwxrwxrwx 1 johnma johnma       44 Sep 17 19:07 libanl.so -> ../../../lib
 /arm-linux-gnueabihf/libanl.so.1
 lrwxrwxrwx 1 johnma johnma       53 Sep 17 19:08 libBrokenLocale.so ->
 ../../../lib/arm-linux-gnueabihf/libBrokenLocale.so.1
 lrwxrwxrwx 1 johnma johnma       45 Sep 17 19:08 libcidn.so ->
 ../../../lib/arm-linux-gnueabihf/libcidn.so.1
 lrwxrwxrwx 1 johnma johnma       46 Sep 17 19:08 libcrypt.so ->
 ../../../lib/arm-linux-gnueabihf/libcrypt.so.1
 lrwxrwxrwx 1 johnma johnma       43 Sep 17 18:50 libdl.so -> ../../../lib
 /arm-linux-gnueabihf/libdl.so.2
 lrwxrwxrwx 1 johnma johnma       42 Sep 17 19:08 libm.so -> ../../../lib
 /arm-linux-gnueabihf/libm.so.6
 lrwxrwxrwx 1 johnma johnma       44 Sep 17 19:08 libnsl.so -> ../../../lib
 /arm-linux-gnueabihf/libnsl.so.1
 lrwxrwxrwx 1 johnma johnma       51 Sep 17 19:08 libnss_compat.so ->
 ../../../lib/arm-linux-gnueabihf/libnss_compat.so.2
 lrwxrwxrwx 1 johnma johnma       48 Sep 17 19:08 libnss_dns.so ->
 ../../../lib/arm-linux-gnueabihf/libnss_dns.so.2
 lrwxrwxrwx 1 johnma johnma       50 Sep 17 19:08 libnss_files.so ->
 ../../../lib/arm-linux-gnueabihf/libnss_files.so.2
 lrwxrwxrwx 1 johnma johnma       51 Sep 17 19:08 libnss_hesiod.so ->
 ../../../lib/arm-linux-gnueabihf/libnss_hesiod.so.2
 lrwxrwxrwx 1 johnma johnma       52 Sep 17 19:08 libnss_nisplus.so ->
 ../../../lib/arm-linux-gnueabihf/libnss_nisplus.so.2
 lrwxrwxrwx 1 johnma johnma       48 Sep 17 19:08 libnss_nis.so ->
 ../../../lib/arm-linux-gnueabihf/libnss_nis.so.2
 lrwxrwxrwx 1 johnma johnma       47 Sep 17 19:08 libresolv.so ->
 ../../../lib/arm-linux-gnueabihf/libresolv.so.2
 lrwxrwxrwx 1 johnma johnma       43 Sep 17 19:08 librt.so -> ../../../lib
 /arm-linux-gnueabihf/librt.so.1
 lrwxrwxrwx 1 johnma johnma       50 Sep 17 19:08 libthread_db.so ->
 ../../../lib/arm-linux-gnueabihf/libthread_db.so.1
 lrwxrwxrwx 1 johnma johnma       45 Sep 17 19:08 libutil.so ->
 ../../../lib/arm-linux-gnueabihf/libutil.so.1
 johnma at aspire-ubuntu:~$
 }}}

 On my system the links did not exist at all.  I had copied the `/lib` and
 `/usr/lib` from my target machine to my build machine using `rsync`.  It
 is possible that my target machine did not have `libc6-dev` installed.  My
 target machine is down right now so I can't tell that for sure.

 However, bottom line, for me to build a stage1 cross-compiler for a
 Raspberry Pi I had to create the relative symlinks shown above.  I also
 had to create a short script to call `gcc` using `--sysroot` pointing to
 my local sysroot with my target `/lib` and `/usr/lib` directories as
 follows where `arm-linux-gnuabihf-gcc` is the cross-compiler from
 [https://github.com/raspberrypi/tools] installed on my build machine:


 {{{
 johnma at aspire-ubuntu:~$ cat mygcc
 #!/bin/bash
 arm-linux-gnueabihf-gcc --sysroot=/home/johnma/rpi-toolchain/rootfs $@
 johnma at aspire-ubuntu:~$
 }}}

 And then used this `./configure` command:


 {{{
 ./configure --target=arm-linux-gnueabihf --enable-unregisterised --with-
 gcc=/home/johnma/mygcc --with-nm=/usr/bin/nm
 }}}

 I tested my build as follows:


 {{{
 johnma at aspire-ubuntu:~$ ./ghc/inplace/bin/ghc-stage1 haq.hs
 [1 of 1] Compiling Main             ( haq.hs, haq.o )
 Linking haq ...
 johnma at aspire-ubuntu:~$

 johnma at aspire-ubuntu:~$ file haq
 haq: ELF 32-bit LSB  executable, ARM, EABI5 version 1 (SYSV), dynamically
 linked (uses shared libs), for GNU/Linux 2.6.32, Buil
 dID[sha1]=26c431c1e98551502c244089c9028ce7e83b7a30, not stripped
 johnma at aspire-ubuntu:~$

 johnma at aspire-ubuntu:~$ cat haq.hs
 --
 -- Copyright (c) 2006 Don Stewart - http://www.cse.unsw.edu.au/~dons/
 -- GPL version 2 or later (see http://www.gnu.org/copyleft/gpl.html)
 --
 import System.Environment

 -- | 'main' runs the main program
 main :: IO ()
 main = getArgs >>= print . haqify . head

 haqify s = "Haq! " ++ s
 }}}

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9589#comment:8>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list