Clang与SO联系

10 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)
Run Code Online (Sandbox Code Playgroud)

当试图链接到.so我正在使用的命令是.

clang++ Main.cpp -o foo -L./ -lchaiscript_stdlib-5.3.1.so
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

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

Som*_*ude 21

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

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

clang++ Main.cpp -o foo libchaiscript_stdlib-5.3.1.so
Run Code Online (Sandbox Code Playgroud)

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

clang++ Main.cpp -o foo libchaiscript_stdlib-5.3.1.so -Wl,-rpath,/absolute/path
Run Code Online (Sandbox Code Playgroud)

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

  • @Searene`-L`添加到构建时链接器路径.`-rpath`添加到加载时库路径(当OS加载库时). (3认同)