背景:假设有两个so, 一个libtarget.so, 一个libsource.so,然后想把source.so 链接到target.so里,使用g++ -Llib_path_of_source.so -lsource.so -o libtarget.so。遇到的问题是ldd target.so 时,提示我libsource.so not found .
解决思路:
1 将lib path of source.so 加入到LD_LIBRARY_PATH
LD_LIBRARY_PATH = $LD_LIBRARY_PATH:lib_path_of_source.so
这里如果提示recursive reference of LD_LIBRARY_PATH, 则将"=" 改成 “:=”
2 如果第一步之后还是不行,则尝试将lib_path_of_source.so加入到/etc/ld.so.conf,加完后记得运行ldconfig,使得你的更改生效
3 如果step 2还是不行,则尝试添加-Wl,-R选项,例如:
g++ -o libtarget.so -L/path_to_libsource.so/ -lsource.so \
-Wl,-R/path_to_libsource.so/ sourceCode1.c ...
-Wl,用于向连接器传递参数,
-R, 用于告诉连接器.so的缺省搜索路径
(本人尝试完这一步就OK了)
4 如果还是不行,那么直接输入绝对路径吧,例如
g++ -o libtarget.so absolute_path_to_libsource.so sourceCode1.c ...