【发布时间】:2015-05-10 17:24:51
【问题描述】:
我自己从源代码构建了libcrypto.a 和libssl.a,将darwin64-x86_64-cc(64 位)和darwin-i386-cc(32 位)指定为OpenSSL 的配置脚本。
使用lipo 创建了胖库,并将它们作为依赖项添加到我的Xcode 项目中。
但是,我得到一个未定义的符号错误:
undefined symbols for architecture x86_64:
"_OPENSSL_ia32cap_P", referenced from:
_AES_cbc_encrypt in libcrypto.a(aes-x86_64.o)
ld: symbol(s) not found for architecture x86_64
注意:不过,对于 iOS,使用相同的技术效果很好。
lipo -detailed_info libcrypto.a 透露:
Fat header in: libcrypto.a
fat_magic 0xcafebabe
nfat_arch 2
architecture i386
cputype CPU_TYPE_I386
cpusubtype CPU_SUBTYPE_I386_ALL
offset 48
size 2700624
align 2^2 (4)
architecture x86_64
cputype CPU_TYPE_X86_64
cpusubtype CPU_SUBTYPE_X86_64_ALL
offset 2700672
size 3938432
align 2^2 (4)
【问题讨论】:
-
您是否安装了这些库的头文件?通常有一个二进制包发行版,它只有库,以及一个单独的开发包,用于库和用于对库进行编码的相关标头。
-
我已经包含了正确的标题。
-
i386 和 x86_64 的标头略有不同。虽然胖库正确构建(或与
lipo正确组合),但除一个切片外,所有切片的标题都会略微偏离。但皮特什是对的。我似乎记得在某些情况下是导出的(如静态存档),但不是在其他情况下(如共享对象)。 How can I check if OpenSSL is suport/use the Intel AES-NI? 提到了这个问题