Nai*_*rou 22 linker gcc static-libraries glfw static-linking
为什么某些静态库(lib*.a)可以以与共享库(lib*.so)链接(ld -l switch)相同的方式链接,但有些不可以?
我一直被教导所有库,无论是否静态,都可以与-l ...链接,但是我到目前为止遇到了一个库(GLFW),如果我发出"未定义的引用"链接错误,它什么都不做试图以这种方式链接它.
根据对这个问题的回答,链接静态库的"正确"方法是将它们与我自己的目标文件一起直接包含在内,而不是使用-l.而且,就GLFW库而言,这肯定解决了这个问题.但是我正在使用的每个其他静态库在与-l链接时工作得很好.
所以:
链接静态库的正确方法是使用-l,但只有在搜索路径上找到库时才有效.如果不是那么你可以使用-L将目录添加到列表中,或者按名称命名文件,如你所说.
实际上,共享库也是如此,尽管它们更有可能被发现.
小智 5
你有没有向GCC表明你的图书馆的路径(使用-L)?通过单独使用-l,GCC将只能链接标准目录中可用的库.
-L[path] -l[lib]
Run Code Online (Sandbox Code Playgroud)