簡體   English   中英

g ++找不到.so文件

[英]g++ not find .so files

我正在嘗試使用g ++編譯器生成c ++庫。 我的庫還有另一個C庫作為依賴項,為了獲得.so文件,我對其進行了編譯。

我有以下結構:

src:
    include/linux:
        libcustom.a
        libcustom.la
        libcustom.so
        libcustom.so.0
        libcustom.so.0.0.0

現在,當我擁有cpp類的所有.o文件時,並且想要鏈接該庫時,我將執行以下命令:

g++ -shared -L/usr/lib/R/lib -Wl,-Bsymbolic-functions -Wl,-z,relro -o mylibrary.so File1.o File2.o File3.o -L./include/linux -lc++ -lutil -lm -lcustom -Wl,-rpath='$ORIGIN/include/linux' -L/usr/lib/R/lib -lR

但這引發了錯誤:

libcustom.so.0: cannot open shared object file: No such file or directory

我正在從src目錄執行命令。

我知道編輯LD_LIBRARY_PATH可能是固定的,但是它的想法是有人可以使用我的庫而無需進行任何配置,因此我嘗試使用c ++的-rpath標志來實現。

任何想法我該如何解決,或者是錯誤原因?

您收到的錯誤消息似乎來自運行時加載程序ld.so而不是鏈接程序ld (我知道名稱令人困惑)。 您必須區分在鏈接時和運行時查找so。 在鏈接時提供的-L標志與在運行時本地化庫無關。

您的rpath=./include/linux值不正確,因為ld無法將識別為相對路徑。 相對搜索路徑應像

-Wl,-rpath='$ORIGIN/include/linux'

$ORIGIN代表可執行文件 (不是mylibrary.so )所在的文件夾。 確保使用單引號而不是雙引號,因為字符串$ORIGIN應該直接傳遞給鏈接器,並硬編碼到可執行文件中。

更多細節

  1. 如何使用相對路徑從共享庫鏈接到共享庫

  2. ld:在共享庫中使用-rpath,$ ORIGIN(遞歸)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM