簡體   English   中英

動態鏈接:更改鏈接路徑

[英]dynamic linking:change of the linking path

通常,當在LD_LIBRARY_PATH中定義必須動態鏈接的庫的路徑時,或者在創建二進制文件時用-L標志將其提及。

在實際情況下,如果讓我們說二進制文件已在客戶端位置構建和部署。 現在,如果動態鏈接庫路徑之一的路徑發生了變化。 那么我們需要向部署了二進制文件的所有客戶端提供一個新的make文件。

還有其他方法可以使我們不必告訴所有客戶端更改其makefile,並且可以在代碼本身中完成某些工作嗎? 如果是的話...有人可以建議如何嗎?

具有諷刺意味的是,這是向我提出的面試問題,而我沒有答案。

編輯:: 我被專門詢問在不接觸makefile的情況下可以在代碼中完成什么。

通常,您僅應更改LD_LIBRARY_PATH ,除非這可能與具有硬編碼搜索路徑的編譯有關: rpath

使用環境變量,例如MYLIBPATH ,並在您的makefile中使用此變量,而不是硬編碼的值。

因此,每個客戶端都可以擁有自己的目錄結構,並且只要它們正確指定MYLIBPATH ,您的程序就可以正常構建。

或者,您可以在makefile中查找庫,如下所示

LIBPATH = $(shell find / -name libmylib.a -exec dirname {} ";" -quit)

myprog: myprog.c
        $(CC) myprog.c -lmylib -L$(LIBPATH)

編輯: locate替換為find ,該find僅返回帶有-quit選項的第一個匹配項

也許訪調員想了解dlopen和dlsym? http://linux.die.net/man/3/dlsym

暫無
暫無

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

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