如何在没有 "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
如果库不在本地目录中,相应地更改点.
。
我的情况是我有一个没有 "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
如果库不在本地目录中,相应地更改点.
。