2014-02-11 34 views
0

我有一個命令行工具,我使用Xcode構建,鏈接到一些Apple框架。作爲一個「個人實驗」(試圖瞭解一點動態庫的工作原理),我試圖將可執行文件指向不同版本的相同框架。Mac OS X - 將可執行文件鏈接到不同的動態庫,加載舊的和新的

比方說,例如,該可執行EXEC使用LIB_A,後者利用LIB_B的。

我做了兩個LIB_ALIB_B將它們放置在不同的(較短)的目錄路徑的副本。我使用otool -L來獲得庫的依賴關係和標識符。

然後我用install_name_tool與指令-id改變的新LIB_ALIB_B IDS(基本上只是改變作爲名稱最主要的路徑沒有改變)。

然後用指令-change我讓新LIB_A指向新LIB_B,並讓可執行EXEC指向新LIB_A

這樣,我想,整個依賴樹應該已被正確地重新創建。


install_name_tool沒有與otool它們都指向正確的路徑返回錯誤,檢查可執行文件和新庫。

不幸的是運行可執行文件EXEC許多錯誤都引發到控制檯有關類的重複定義。就像舊圖書館和新圖書館都裝載了一樣。

最後一切都崩潰與跟蹤/ BPT陷阱:5

例如:

objc[25992]: Class NSAppleEventManager is implemented in both 
      /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation and 
      /xyz/Foundation. 
      One of the two will be used. Which one is undefined. 

如果我調用

export DYLD_PRINT_LIBRARIES=1 

我在執行看到實際庫被加載兩次。

回答

0

我實際上是由殘酷的設置

export DYLD_LIBRARY_PATH= 

,對於我的具體情況制定解決問題。

相關問題