gcc / ld真的会在最终的可执行文件中包含对这些共享库的引用,即使没有对这些函数的引用吗?如果是这样,那么做这样的事情可能会给我带来任何潜在的问题吗?
答案 0 :(得分:1)
看看这个测试:
如果你有
//file.c
int main(){
return 1;
}
编译
gcc file.c -lm
然后
$ ldd a.out
linux-vdso.so.1 => (0x00007fff3ece6000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1898e59000)
/lib64/ld-linux-x86-64.so.2 (0x00007f1899269000)
没有指向mathlib的链接
您可能遇到的问题是更长的链接时间和意外符号冲突的风险。
答案 1 :(得分:0)
除了@xvan引用的链接时间和可能的符号冲突之外,如果您碰巧构建包(例如RPM),那些额外的链接会导致不必要的依赖关系,从而导致在目标系统上安装额外的包。 / p>
进一步阅读: