将Objective-C程序与我自己的libobjc.A.dylib相关联时出现问题

时间:2014-08-31 10:08:51

标签: objective-c linker runtime clang

我从apple的开源网站的源代码构建了一个自定义的libobjc.A.dylib,我想通过使用dylib编译一个简单的程序来调试它,但似乎clang总是使用系统libobjc.A.dylib。

编译命令是:

xcrun --sdk macosx10.8 clang main.m -std=c99 -framework Foundation -lobjc -I./usr/include -L.

libobjc.A.dylib位于当前文件夹中。 otool命令告诉我程序链接的库:

~ otool -L a.out
a.out:
    /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 945.18.0)
    /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
    /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 744.19.0)

http://opensource.apple.com/source/objc4/objc4-551.1/test/test.pl文件中,它使用了一个名为-fno-objc-link-runtime的标志,但它似乎无法使用我的笔记本电脑(mac 10.9.4,xcode 5.1.1)

尝试设置DYLD_LIBRARY_PATH环境var,但它不起作用。这是我编译代码https://github.com/Jeswang/Compile-Issue的文件夹,任何建议或解决方案?

1 个答案:

答案 0 :(得分:1)

实际上,我使用 install_name_tool 命令来更改库的链接:

install_name_tool -change /usr/lib/libobjc.A.dylib @executable_path/libobjc.A.dylib main

有用的链接:

dyld manual

mikeash.com: Friday Q&A 2009-11-06: Linking and Install Names