Linker

在不接觸系統文件的情況下使用ldconfig

  • July 1, 2015

我已經編譯了一個庫,現在我應該執行ldconfig. 但是,我寧願不修改/etc/ld.so.conf,也不修改任何其他系統文件。是否可以在其他地方生成記憶體,然後僅在編譯選定程序時使其可見?或者我應該為此手動設置LD_LIBRARY_PATH和?LD_RUN_PATH

您可以檢查ldconfig-f的選項:

-f conf

使用 conf 而不是 /etc/ld.so.conf。

如果你執行:

ldconfig -f custom.conf

具有足夠權限的使用者將修改/etc/ld.so.cache. ld讀取/etc/ld.so.cache,我不認為你可以讓它從不同的文件中讀取。

由於您不想修改系統文件,您可以執行以下操作:

gcc -W -Wall -L/path_to_your_library -lyour_library test.c -o testo

建構你的 testo.c

然後:

export LD_LIBRARY_PATH=/path_to_your_library

執行它,儘管設置LD_LIBRARY_PATH調試幫助並嘗試更新版本的庫,但它在一般開發環境設置和部署中的使用被認為是不好的。更多你可以在這裡查看

另一種方法可能是使用rpath

unset LD_LIBRARY_PATH
gcc -L/path_to_your_library -Wl,-rpath=/path_to_your_library -W -Wall -o testo testo.c -lyour_library

使用rpath方法,每個程序都可以獨立列出其共享庫位置。缺點:共享庫應安裝在固定位置。此外,我還沒有測試過,但如果庫引用 NFS 掛載可能會出現問題。

引用自:https://unix.stackexchange.com/questions/213243