我的情况是我有一个没有“lib”前缀的库。我想链接它,我不能重新编译它(它实际上是一个Python模块)。
现在,如果在GCC或clang中使用'-l'标志,则会自动添加lib前缀并找不到库。对于GCC,我可以使用'-l:mylib.so'来链接任意文件。
然而,这不适用于铿锵声。是否有可能在没有“lib”前缀的情况下将clang链接到特定的库?
答案 0 :(得分:1)
这回答了这个问题,但是从一个不同的角度来看。请参阅相关问题C++ 11 code compiles with `clang++`, but not with `clang -x c++`。
链接器根据文件内容将目标文件与库区分开来。
如果您使用clang++ -x c++
,则 无效。相反,库文件被视为C ++源文件,这会产生一百万左右的编译错误。并且您不能将库文件放在-x c++
之前,因为所需的符号不会被链接。
一个明显的解决方案是将源文件重命名为.cpp
扩展名,因此-x
开关是不必要的(或使用符号链接)。但是添加到构建系统可能会很痛苦。
与OP问题直接相关的另一个解决方案是通过标志指定库:
-L. -l:mylib.foo
如果库不在本地目录中,请相应地更改点.
。