我正在尝试编译一个我用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
发布于 2019-05-31 06:14:49
-L标志告诉在链接时在哪里查找库,而LD_LIBRARY_PATH则告诉在运行时在哪里查找库。因此,无论您在链接时设置什么路径,在运行可执行文件时都会忽略这一点。
您需要让LD_LIBRARY_PATH在运行时包含动态库的目录,以便您的可执行文件能够找到它。
LD_LIBRARY_PATH=/data/openpilot/selfdrive/df/libs:"$LD_LIBRARY_PATH" ./your-exechttps://stackoverflow.com/questions/56385984
复制相似问题