如何在没有 "lib" 前缀的情况下针对库获取 link 的 clang?

How to get clang to link against a library without the "lib" prefix?

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

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

但是,这对 clang 不起作用。是否可以在没有 'lib' 前缀的情况下针对特定库发出 link 的 clang?

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

gcc documention 状态:

Object files are distinguished from libraries by the linker according to the file contents.

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

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

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

    -L. -l:mylib.foo

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