繁体   English   中英

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

[英]How can I override shared library in LD_LIBRARY_PATH with clang++?

我正在尝试编译用C ++写的共享库,以在当前目录中使用另一个共享库的特定版本,但是它似乎忽略了它,并且在LD_LIBRARY_PATH中使用了(较旧且不兼容的).so文件。运行。 我将如何覆盖它用来使用自己的.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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM