[英]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.