2014-02-11 64 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= 

,对于我的具体情况制定解决问题。

相关问题