我正在尝试编译我用C ++编写的共享库,以在当前目录中使用另一个共享库的特定版本,但是似乎忽略了它,并且使用了(旧的和不兼容的).so文件。我的LD_LIBRARY_PATH
在运行时。我将如何覆盖它用来使用自己的.so文件?我还需要保留旧版本,以便在同一系统上其他用途。
这是我用来编译的命令:clang++ /data/openpilot/selfdrive/df/libs/libSNPE.so -lsymphony-cpu -lsymphonypower -I/data/openpilot/phonelibs/snpe/include -std=c++14 -lstdc++ -fPIC -o d_f.so dynamic_follow.cc -shared
/data/openpilot/selfdrive/df/libs/libSNPE.so
是我要使用的库。
我还尝试在库文件之前使用-l
标志,但是它返回cannot find -l/data/openpilot/selfdrive/df/libs/libSNPE.so
还通过以下命令确认仍在LD_LIBRARY_PATH中使用该库:clang++ -Wl,-rpath,/data/openpilot/selfdrive/df/libs -L/data/openpilot/selfdrive/df/libs -lSNPE -lsymphony-cpu -lsymphonypower -I/data/openpilot/phonelibs/snpe/include -std=c++14 -stdlib=libc++ -fPIC -o d_f.so dynamic_follow.cc -shared
答案 0 :(得分:1)
-L
标志指示在链接时在哪里寻找库,而LD_LIBRARY_PATH
标志在运行时在哪里寻找库。因此,无论您在链接时设置的路径如何,在运行可执行文件时都会忽略该路径。
您需要LD_LIBRARY_PATH
在运行时包含动态库的目录,以便可执行文件找到它。因此,您可以这样运行可执行文件:
LD_LIBRARY_PATH=/data/openpilot/selfdrive/df/libs:"$LD_LIBRARY_PATH" ./your-exec