我一直在
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添加到库搜索路径。
答案 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
添加运行时链接器搜索路径的路径。