gcc linker выдаёт неожиданно так (clang нормально)
Программа правильно связана с clang, но не с gcc:
% CC=clang make
clang -I/usr/include/lua5.1 -llua5.1 -shared -fPIC -o mk_lua.so mk_lua.c
% ldd mk_lua.so
linux-vdso.so.1 => (0x00007fff4effe000)
liblua5.1.so.0 => /usr/lib/x86_64-linux-gnu/liblua5.1.so.0 (0x00007fa94b316000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa94af51000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa94ac4a000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fa94aa46000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa94b752000)
GCC дает разные результаты (конечно, приводит к неработающей разделяемой библиотеке).
% CC=gcc make
gcc -I/usr/include/lua5.1 -llua5.1 -shared -fPIC -o mk_lua.so mk_lua.c
% ldd mk_lua.so
linux-vdso.so.1 => (0x00007fffcf3fe000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe2e3e06000)
/lib64/ld-linux-x86-64.so.2 (0x00007fe2e43d9000)
- gcc версия 4.9.1 (Ubuntu 4.9.1-16ubuntu6)
- Версия Ubuntu clang 3.5.0-4ubuntu2 (tags/RELEASE_350/final) (на основе LLVM 3.5.0)
Параметры линкера идентичны. Что здесь происходит?
Полный источник здесь.