如何使用clang ++覆盖LD_LIBRARY_PATH中的共享库?

时间:2019-05-30 21:42:45

标签: c++

我正在尝试编译我用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

1 个答案:

答案 0 :(得分:1)

-L标志指示在链接时在哪里寻找库,而LD_LIBRARY_PATH标志在运行时在哪里寻找库。因此,无论您在链接时设置的路径如何,在运行可执行文件时都会忽略该路径。

您需要LD_LIBRARY_PATH运行时包含动态库的目录,以便可执行文件找到它。因此,您可以这样运行可执行文件:

LD_LIBRARY_PATH=/data/openpilot/selfdrive/df/libs:"$LD_LIBRARY_PATH" ./your-exec