I am getting undefined_symbol errors when using gold for linking.

1/
With bfd:

$ make tidy
$ make -j7 makefiles shared=yes dynamicmaps=no
shlib_directory=/usr/lib64/postfix/MAIL_VERSION DEBUG=
CC=x86_64-pc-linux-gnu-gcc 'OPT=-march=native -O2 -pipe -Wno-comment'
'CCARGS=-DHAS_PCRE -DHAS_LDAP -DUSE_TLS -DNO_NIS -D_FILE_OFFSET_BITS=64
-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE' 'AUXLIBS=-Wl,-O1
-Wl,--as-needed -ldl -lpam -lssl -lcrypto' AUXLIBS_CDB=
'AUXLIBS_LDAP=-lldap -llber' AUXLIBS_LMDB= AUXLIBS_MYSQL=
'AUXLIBS_PCRE=-L/usr/lib64 -lpcre' AUXLIBS_PGSQL= AUXLIBS_SQLITE= 
[...]
[... end successful build ...]
$ ./bin/postconf mail_version
./bin/postconf: error while loading shared libraries:
libpostfix-global.so: cannot open shared object file: No such file or
directory

[ would have been nice to run commands in the build tree ]

$ LD_LIBRARY_PATH="./lib"./bin/postconf mail_version
mail_version = 2.12-20140713


2/
with gold:

same make statements as above resulting in a successful build again but:

$ LD_LIBRARY_PATH="./lib" ./bin/postconf mail_version
./bin/postconf: symbol lookup error: ./lib/libpostfix-util.so: undefined
symbol: pcre_malloc

and sure enough:

# linked with bfd
$ ldd bin/postconf
        linux-vdso.so.1 (0x00007fff885fe000)
        libpostfix-global.so => not found
        libpostfix-util.so => not found
        libldap-2.4.so.2 => /usr/lib64/libldap-2.4.so.2 (0x00007f70430c9000)
        libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f7042e60000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f7042abd000)
        liblber-2.4.so.2 => /usr/lib64/liblber-2.4.so.2 (0x00007f70428ae000)
        libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f7042697000)
        libssl.so.1.0.0 => /usr/lib64/libssl.so.1.0.0 (0x00007f704242e000)
        libcrypto.so.1.0.0 => /usr/lib64/libcrypto.so.1.0.0 (0x00007f7042060000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f7041e43000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f7043312000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f7041c3f000)
        libz.so.1 => /lib64/libz.so.1 (0x00007f7041a29000)

# linked with gold
$ ldd bin/postconf
        linux-vdso.so.1 (0x00007fffe5ffe000)
        libpostfix-global.so => not found
        libpostfix-util.so => not found
        libc.so.6 => /lib64/libc.so.6 (0x00007feb6e377000)
        /lib64/ld-linux-x86-64.so.2 (0x00007feb6e71a000)

Link order seems good.  No idea which behaviour is correct.

-- 
Eray

Reply via email to