發現自己用GCC編譯的動態庫 改個名字還可以用 但是用CMake寫的 改了名字編譯可以過 但是執行的時候就提示找不到了 用ldd查看 還是要找之前的名字 后來發現cmake產生的so里面就帶有自己的名字 請問各位大神 這是什么情況呢? 是什么引數把庫的名字也寫入到庫里面了?
uj5u.com熱心網友回復:
自己找到了,記錄一下是GCC的-Wl,-soname指令指定了庫的名字(把名字內嵌到了庫檔案中),這么做主要是為了升級時的版本管理,細節可自行百度
另外Cmake中一般都是通過export LDFLAGS="-Wl,-O1 -Wl,--hash-style=gnu -Wl,--build-id=sha1 -Wl,--as-needed"這種方式來指定傳給聯結器的引數
uj5u.com熱心網友回復:
有這種事?感覺so在LIBRARY_PATH(編譯時)或LD_LIBRARY_PATH(運行時)路徑下應該沒問題啊uj5u.com熱心網友回復:
編譯可執行檔案時沒問題,運行時提示找不到庫 應該是編譯可執行檔案的時候不是根據 LIBRARY_PATH這個下面的動態庫的名字確定的LD_LIBRARY_PATH下面的名字 而是根據庫里面內嵌的名字決定的 用readelf -d 動態庫名 可以查看動態庫是否內嵌了名字(SONAME欄位)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/185068.html
標籤:工具平臺和程序庫
