截汇编libgcrypt的iPhone手机?接头的错误...似乎无法找到"fwrite"和"strerror"?
-
06-07-2019 - |
题
我有成功 截编制Apache便携式运行时(日)的iPhone, 使用一套 配置的脚本 调用的GNU Autotools"./配置"必要的交叉汇编的选择。
我现在尝试跨汇编,并且取决于libtasn1和libgcrypt,这反过来又取决于libgpg-错误。这是我遇到的麻烦和可以使用你们的帮助...
目前我正在试图跨汇编libgpg-错误。Configure scripts,我使用之前是精美的工作;的"。/配置"过程完成干净。问题发生的时候我跑"作出"。当我运行做出的,似乎一切都以汇编,但是后来我得到以下讨厌的接头的错误在结束:
/bin/sh ../libtool --tag=CC --mode=link /Users/michaelsafyan/Downloads/libgpg-error-1.7/compile /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 -std=c99 -arch armv6 -pipe -no-cpp-precomp --sysroot='/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk' -isystem /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/lib/gcc/arm-apple-darwin9/4.2.1/include/ -isystem /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/include -isystem /Developer/Platforms/iPhoneOS.platform/Developer/usr/include -isystem /opt/iphone-3.0/include -isystem /usr/local/iphone-3.0/include -arch armv6 --sysroot='/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk' -L/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/lib -L/Developer/Platforms/iPhoneOS.platform/Developer/usr/lib -L/opt/iphone-3.0/lib -L/usr/local/iphone-3.0/lib -o gpg-error gpg_error-strsource-sym.o gpg_error-strerror-sym.o gpg_error-gpg-error.o ./libgpg-error.la /Users/michaelsafyan/Downloads/libgpg-error-1.7/compile /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 -std=c99 -arch armv6 -pipe -no-cpp-precomp --sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk -isystem /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/lib/gcc/arm-apple-darwin9/4.2.1/include/ -isystem /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/include -isystem /Developer/Platforms/iPhoneOS.platform/Developer/usr/include -isystem /opt/iphone-3.0/include -isystem /usr/local/iphone-3.0/include -arch armv6 --sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk -o gpg-error gpg_error-strsource-sym.o gpg_error-strerror-sym.o gpg_error-gpg-error.o -L/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/lib -L/Developer/Platforms/iPhoneOS.platform/Developer/usr/lib -L/opt/iphone-3.0/lib -L/usr/local/iphone-3.0/lib ./.libs/libgpg-error.a Undefined symbols: "_fwrite$UNIX2003", referenced from: _main in gpg_error-gpg-error.o "_strerror$UNIX2003", referenced from: _gpg_strerror in libgpg-error.a(libgpg_error_la-strerror.o) ld: symbol(s) not found collect2: ld returned 1 exit status make[3]: *** [gpg-error] Error 1 make[2]: *** [all] Error 2 make[1]: *** [all-recursive] Error 1 make: *** [all] Error 2
任何想法怎么得到这工作吗?该软件版本,我是汇编有:
- libgpg-错误:1.7
- libgcrypt:1.4.4
- libtasn1:2.2
- 并且:2.8.4
请帮助。谢谢你。
更新
按最初的反馈,各个SDK有一个复制的"libSystem.dylib"在"$SDKROOT/usr/lib".有没有复制的libSystem在"$DEVROOT/usr/lib",其中:
- $DEVROOT="/Developer/平台/iPhoneOS.平台/开发"
- $SDKROOT="$DEVROOT/Sdk/iPhoneOS$VER.sdk"
在"libSystem"库包含的普通人,未修饰的版本中,每个符号,但是不包含在"$UNIX2003"变体的符号。我怀疑,全球公益物的错误定义"_POSIX_C_SOURCE","_UNIX",或另一个UNIX功能测试宏和那个流氓头添加"$UNIX2003"的功能时,这些功能测试的宏本是被包括在内。删除"$DEVROOT/usr/包括"从清单中包括的目录没有影响有关消除这种错误信息。
作为最后的手段,我看到"ld"接受"-alias_list"选项,允许一个指定文件的项目,如"_fwrite_fwrite$UNIX2003",以强行解决这些不确定的符号他们的未装饰的变体。如果可能的话,我想避免这种选择,因为它似乎予以解决了与潜在的危险。
解决方案
通常一个尚未解决的 符号$UNIX2003 意味着你 联对老年SDK一个比现有的对象的文件是建立对.
一个奇怪包括道路对我来说,和请注意,我只是很熟悉与Mac发展,而不是在所有有研究与开发,是路径
/Developer/Platforms/iPhoneOS.platform/Developer/usr/include
这是不实际的SDK文件夹。它是可能的,你已经拿起流氓的符号,如果他们是从那里?似乎不太可能,因为它发生在以后的命令行比SDK包括路径。
也许不是符号的预期版本的 _fwrite
和 _strerror
等等 gpg_error-gpg-error.o
和 libgpg-error.a
是好吧,它是一个真正的联系问题,虽然再一次不太可能,因为你有
/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/lib
如a-L的选择。我假设有一个libSystem dylib在那里的某个地方?
我想要做的第一件事是确定是否UNIX2003版本的符号是什么你期望或没有。我猜是这样,但正如我说的我可以是完全错误的。:)
其次你可以试试越来越详细的输出 ld
看到它在哪里找到的符号。我肯定有一个环境变量可以设置来让这种事发生但我看不到任何列入清单的在线人页 ld
. (更新:两个env变量 LD_TRACE_ARCHIVES
和 LD_TRACE_DYLIBS
但也许他们得到的一样-t?).
编辑:
OK,因此我完全错误的有关UNIX2003符号是那些被要求。笑。
当你建libgpg错误,我认为它会已经创建了一个文件
src/.deps/gpg_error-全球公益物的错误。Po
其中包含标题的依赖关系(至少没有对我的Linux系统)。这可能会得到一个线索在那里挑选了错误的头当建立gpg_error-全球公益物的错误。o.
顺便说一句,它看起来如果libgpg错误配置脚本接受一个 -isysroot
和 -arch
选项。你可以不使用这些而不是你自己的版本配置剧本吗?
Edit2:
好吧,让我们有另一个去:)这里有一些东西尝试,开始从一个干净的源文件夹:
- 使用isysroot而不是--sysroot
- 使用isysroot以及--sysroot
- 暂时使你的系统正常标题无法通过,例如,重新命名的文件夹。我们希望的建立将落在无法找到一个头和它会告诉你到底在哪里。
其他提示
尝试进行预处理gpg_error-全球公益物的错误。c-E,然后搜索失踪的符号。你应该找到从这里有inclued(喜欢的东西asm("_""好""@UNIX2003").然后,修改这个标题(unistd.h例如添加一个警告"这里").现在,重新编译,并且你应该找到包括堆。
美元的2003年后缀由编译器生成,在某些情况下,你可以找到充分记录在手册中的项兼容性
man compat
我纠结这一段时间之前最后定通过设置
-mmacosx-version-min=10.3
任何版本之前10.4将做的工作。我怀疑,鉴于游吟诗人的回答,我可能会更好寻找错误地联系图书馆使用-t选择ld
希望这会有所帮助。