为什么一些静态库(lib*.a)可以像共享库(lib*.so)一样通过链接(ld -l开关)链接,但有些不行?
我一直被教导说所有库,无论是静态的还是非静态的,都可以使用-l...进行链接,然而我遇到过一个库(GLFW),如果我尝试以这种方式链接它,它就会不停地输出“undefined reference”链接错误。
根据这个问题上的回答,连接静态库的“正确”方法是直接将它们包含在内,以及我的自己的目标文件,而不是使用-l。在GLFW库的情况下,这确实解决了问题。但我使用的其他所有静态库都可以通过使用-l进行链接。
所以:
我一直被教导说所有库,无论是静态的还是非静态的,都可以使用-l...进行链接,然而我遇到过一个库(GLFW),如果我尝试以这种方式链接它,它就会不停地输出“undefined reference”链接错误。
根据这个问题上的回答,连接静态库的“正确”方法是直接将它们包含在内,以及我的自己的目标文件,而不是使用-l。在GLFW库的情况下,这确实解决了问题。但我使用的其他所有静态库都可以通过使用-l进行链接。
所以:
- 什么原因会导致这个库不能通过链接而必须直接包含?如果我知道原因,也许我可以编辑和重新编译库来修复这个问题。
- 你是否应该以与链接共享库不同的方式链接静态库?(如果不是,为什么不是?)
- 当以这种方式直接包含库时,链接器是否仍能消除未使用的库函数并从输出可执行文件中消除它们?