兩個project:
dym -> dym.framework
hello -> hello.app
hello.app動態連結dym.framework
關於動態連結的xcode設定有以下幾個變數:
@rpath
hello專案中,Run Path search paths的值,基本格式如下:
//:configuration = Debug
LD_RUNPATH_SEARCH_PATHS = $(inherited) @loader_path/Frameworks @executable_path/Frameworks
//:configuration = Release
@loader_path
根據apple doc的解析,是使用載入共享庫的二進位制檔案所在的目錄
比如, hello.app/hello會載入dym.framework/dym,則@loader_path指向hello.app目錄
@executable_path
根據app包中的可執行檔案所在的目錄;
dym專案需要設定:
Dynamic Library Install Name Base: @rpath
這樣, Dynamic Library install Name, 預設設定
$(DYLIB_INSTALL_NAME_BASE:standardizepath)/$(EXECUTABLE_PATH)
就會顯示成
@rpath/dym.framework/dym
那麼,編譯生成的動態庫檔案中,會儲存對應的install name資訊
hello專案的設定,只需要設定Run Path search paths即可,
編譯完成後,會將path引數的資訊儲存到hello的目標檔案的RPATH中,
程式執行的時候,會在RPATH指定的路徑下,查詢動態庫的install name; 關於rpath在編譯器中是怎麼生成的,可以參考這裡。
使用dlopen開啟的時候,會根據@rapth指定的路徑,查詢動態庫, 使用以下格式就可以開啟:
dlopen(“./dym.framework/dym”, RTLD_LAZY);
兩個project:
dym -> dym.framework
hello -> hello.app
hello.app動態連結dym.framework
關於動態連結的xcode設定有以下幾個變數:
@rpath
hello專案中,Run Path search paths的值,基本格式如下:
//:configuration = Debug
LD_RUNPATH_SEARCH_PATHS = $(inherited) @loader_path/Frameworks @executable_path/Frameworks
//:configuration = Release
LD_RUNPATH_SEARCH_PATHS = $(inherited) @loader_path/Frameworks @executable_path/Frameworks
@loader_path
根據apple doc的解析,是使用載入共享庫的二進位制檔案所在的目錄
比如, hello.app/hello會載入dym.framework/dym,則@loader_path指向hello.app目錄
@executable_path
根據app包中的可執行檔案所在的目錄;
dym專案需要設定:
Dynamic Library Install Name Base: @rpath
這樣, Dynamic Library install Name, 預設設定
$(DYLIB_INSTALL_NAME_BASE:standardizepath)/$(EXECUTABLE_PATH)
就會顯示成
@rpath/dym.framework/dym
那麼,編譯生成的動態庫檔案中,會儲存對應的install name資訊
hello專案的設定,只需要設定Run Path search paths即可,
編譯完成後,會將path引數的資訊儲存到hello的目標檔案的RPATH中,
程式執行的時候,會在RPATH指定的路徑下,查詢動態庫的install name; 關於rpath在編譯器中是怎麼生成的,可以參考這裡。
使用dlopen開啟的時候,會根據@rapth指定的路徑,查詢動態庫, 使用以下格式就可以開啟:
dlopen(“./dym.framework/dym”, RTLD_LAZY);