簡體   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