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