1

程序与 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)

链接器选项是相同的。这里发生了什么?

完整来源在这里

4

0 回答 0