为什么有些静态库(lib*.a)可以像链接共享库(lib*.so)一样链接(ld -l 开关),但有些不能?
我一直被教导说所有库,无论是否静态,都可以用 -l... 链接,但是到目前为止我已经遇到了一个库(GLFW),它除了会喷出“未定义的引用”链接错误之外什么也没做尝试以这种方式链接它。
根据对这个问题的回答,链接静态库的“正确”方法是将它们与我自己的目标文件一起直接包含,而不是使用 -l。而且,在 GLFW 库的情况下,这当然可以解决问题。但是我使用的所有其他静态库在与 -l 链接时都可以正常工作。
所以:
- 是什么导致这个库在链接而不是直接包含时无法工作?如果我知道原因,也许我可以编辑并重新编译库来解决问题。
- 您是否不应该像链接共享库一样链接静态库?(如果没有,为什么不呢?)
- 当以这种方式直接包含库时,链接器是否仍然能够从输出可执行文件中消除未使用的库函数?