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

use*_*829 6 c++ shared-libraries clang dynamic-linking

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

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

然而,这对 clang 不起作用。是否可以让 clang 链接到没有“lib”前缀的特定库?

Jos*_*sey 6

这回答了这个问题,但角度有些不同。请参阅相关问题C++ 11 代码使用 `clang++` 进行编译,但不使用 `clang -x c++` 进行编译

gcc文档指出:

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

如果您使用的话,这不起作用clang++ -x c++。相反,库文件被视为 C++ 源文件,这会产生大约一百万个编译错误。并且您不能将库文件放在 之前-x c++,因为所需的符号不会被链接进来。

一种明显的解决方案是重命名源文件以具有.cpp扩展名,因此-x不需要切换(或使用符号链接)。但这可能会很痛苦添加到您的构建系统中。

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

    -L. -l:mylib.foo
Run Code Online (Sandbox Code Playgroud)

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