簡體   English   中英

如何找到“我的” lib目錄?

[英]How to find “my” lib directory?

我正在Linux下開發一個C ++程序。 我想在庫中放入一些東西(具體來說是LLVM位代碼文件,但這並不重要),所以我想要以下目錄結構:

/somewhere/bin/myBin
/somewhere/lib/myLib.bc

如何找到lib目錄? 我嘗試從argv[0]計算相對部分,但是如果/somewhere在我的PATH ,則argv[0]僅包含myBin 有什么辦法可以走這條路嗎? 還是我必須在編譯時設置它?

GNU自動工具如何處理呢? 如果為./configure提供--prefix選項,會發生什么情況?

編輯: 字庫是有點在我的情況產生誤導。 我的包含LLVM位代碼,因此它不是實際的(共享)對象文件,而只是我想從程序中打開的文件。 您可以將其視為圖像或文本文件。

也許您想要的是:

/usr/lib 

Unix目錄參考: http : //www.comptechdoc.org/os/linux/usersguide/linux_ugfilestruct.html

假設您的lib目錄是相對於可執行文件的“ ../lib”

首先,您需要確定myBin的位置,可以通過閱讀/ proc / self / exe來獲取它。

然后,用“ ../lib”連接二進制文件路徑將給您lib目錄。

您將必須使用編譯器標志來告知程序。 例如,如果您有一個插件目錄:

# Makefile.am
AM_CPPFLAGS = -DPLUGIN_DIR=\"${pkglibdir}\"
bin_PROGRAMS = awesome_prog
pkglib_LTLIBRARIES = someplugin.la

要搜索的目錄列表存儲在文件/etc/ld.so.conf

在Linux中,環境變量LD_LIBRARY_PATH是用冒號分隔的一組目錄,在該目錄中,應在標准目錄集之前先搜索庫; 這在調試新庫或出於特殊目的使用非標准庫時很有用。

LD_LIBRARY_PATH適用於開發和測試:

$ export LD_LIBRARY_PATH=/path/to/mylib.so
$ ./myprogram

[閱讀更多]

僅解決部分問題“如何使用GNU自動工具處理此問題?” ...

當您分配--prefix進行配置時,基本上會發生兩件事:1)它指示構建系統將所有內容都安裝在$ {prefix}中,以及2)它看起來在$ {prefix} /share/config.site中有關如何設置系統的任何其他信息(通常不存在該文件。)它絕對無助於查找庫,但取決於用戶是否正確設置了工具鏈。 如果要在/ foo / lib中使用庫,則必須在其中設置工具鏈(例如,通過將/ foo / lib放在/etc/ld.so.conf中,或通過-L / foo / LDFLAGS中的lib和LD_LIBRARY_PATH中的“ / foo / lib”)

configure腳本依賴您來設置環境。 它不會幫助您設置該環境,但會通過提醒您尚未設置環境來提供幫助。

您可以在/proc/self/exe上使用readlink系統調用來獲取可執行文件的路徑。 然后,您可以使用realpath等。

暫無
暫無

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

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