Clang与SO联系

时间:2014-08-06 12:20:45

标签: c++ linker clang chaiscript

我一直在

ld: library not found for -lchaiscript_stdlib-5.3.1.so
clang: error: linker command failed with exit code 1 (use -v to see invocation)

尝试链接到.so时 我使用的命令是。

clang++ Main.cpp -o foo -L./ -lchaiscript_stdlib-5.3.1.so

我做错了什么?

libchaiscript_stdlib-5.3.1.so与Main.cpp位于同一目录中我认为-L./会将.so添加到库搜索路径。

1 个答案:

答案 0 :(得分:19)

-L选项会添加搜索路径,但链接器会自行添加.so(或.a)后缀(就像添加lib前缀一样)。所以你只需要-lchaiscript_stdlib-5.3.1,链接器就可以找到它。

您也可以跳过添加路径,并直接链接到文件:

clang++ Main.cpp -o foo libchaiscript_stdlib-5.3.1.so

请注意,运行时链接程序(在运行程序时实际加载共享库的内容)可能无法找到库(如果它不在运行时链接程序路径中)。您可以告诉(编译时)链接器在生成的程序中添加到共享库路径的路径:

clang++ Main.cpp -o foo libchaiscript_stdlib-5.3.1.so -Wl,-rpath,/absolute/path

-Wl选项告诉编译器前端将选项传递给链接器,链接器选项-rpath添加运行时链接器搜索路径的路径。