【发布时间】:2014-06-23 12:43:28
【问题描述】:
我正在尝试链接库的修改版本 (LAME)。
我下载了源代码,进行了修改并构建了共享对象文件。
然后我将共享库文件复制到我想要链接到的项目的./lib 文件夹中。另一个项目只是测试我的修改的一个小工具。我还从 LAME 的 ./include 复制了相关标题。
我建立了我的安全带:
gcc -c src/harness.c -o obj/harness.o
gcc obj/harness.o -o bin/harness -L./lib/ -libmp3lame
但令我惊讶的是:
$ ldd ./bin/harness
linux-vdso.so.1 => (0x00007fffbc5fe000)
libmp3lame.so.0 => /usr/lib/x86_64-linux-gnu/libmp3lame.so.0 (0x00007f10d9468000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f10d90a0000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f10d8d9b000)
/lib64/ld-linux-x86-64.so.2 (0x00007f10d9713000)
(链接的是 /usr/lib/... 库,而不是线束项目目录中 ./lib 中的库。
然后我将自定义的 libmp3lame.so 的名称更改为 libsomeothername.so 并尝试链接它。同样的事情发生了 - 安装的 libmp3lame 被链接而不是我自定义的。
这里发生了什么?为什么编译器不按它说的做呢?为什么/usr/lib/.../libmp3lame 会被链接即使没有使用该名称?
【问题讨论】:
标签: c gcc linker shared-libraries