为什么一些静态库(lib * .a)可以像链接共享库(lib * .so)一样进行链接(ld -l switch),但有些不能?我总是被教导说,所有的库,静态或不是,都可以链接到-l ...,但是我到目前为止已经遇到了一个库(GLFW),它除了发送“未定义的引用”外什么都不做,链接错误,如果我尝试以这种方式链接它。使用GCC链接静态库的正确方法
根据对this question的响应,链接静态库的“正确”方式是将它们与我自己的目标文件一起直接包含进来,而不是使用-l。而且,就GLFW图书馆而言,这当然可以解决这个问题。但是,我使用的其他静态库在与-l链接时工作得很好。
所以:
- 这是什么原因一个库链接的时候,而不是直接列入不工作?如果我知道原因,也许我可以编辑并重新编译库来解决问题。
- 难道你不应该像链接共享库一样链接静态库吗? (如果没有,为什么不呢?)
- 当库以这种方式直接包含时,链接器是否仍然能够从输出可执行文件中消除未使用的库函数?
是的,在相应的-l标志之前,使用-L提供每个库的路径。 GCC可以找到该库,但会在库中提供大量未定义的参考错误。 – Nairou 2012-03-31 01:40:33