如何让clang链接到没有“lib”前缀的库?

时间:2015-01-29 16:35:10

标签: c++ shared-libraries clang dynamic-linking

我的情况是我有一个没有“lib”前缀的库。我想链接它,我不能重新编译它(它实际上是一个Python模块)。

现在,如果在GCC或clang中使用'-l'标志,则会自动添加lib前缀并找不到库。对于GCC,我可以使用'-l:mylib.so'来链接任意文件。

然而,这不适用于铿锵声。是否有可能在没有“lib”前缀的情况下将clang链接到特定的库?

1 个答案:

答案 0 :(得分:1)

这回答了这个问题,但是从一个不同的角度来看。请参阅相关问题C++ 11 code compiles with `clang++`, but not with `clang -x c++`

gcc documention州:

  

链接器根据文件内容将目标文件与库区分开来。

如果您使用clang++ -x c++,则 无效。相反,库文件被视为C ++源文件,这会产生一百万左右的编译错误。并且您不能将库文件放在-x c++之前,因为所需的符号不会被链接。

一个明显的解决方案是将源文件重命名为.cpp扩展名,因此-x开关是不必要的(或使用符号链接)。但是添加到构建系统可能会很痛苦。

与OP问题直接相关的另一个解决方案是通过标志指定库:

    -L. -l:mylib.foo

如果库不在本地目录中,请相应地更改点.