OpenSSL版本。 0.9.8za已安装在我的系统上(darwin64-x86_64-cc),我选择使用UNIX系统的说明在下载的tarball中的“INSTALL”文件中安装最新版本1.0.1j。我选择使用64位选项'./Configure darwin64-x86_64-cc'进行配置,然后运行makefile。到现在为止还挺好。大约一分钟之后,正如我认为安装成功,编译器在编译终止后显示以下错误消息:
编译命令行:'./Configure darwin64-x86_64-cc'(64位的Openssl建议)
duplicate symbol _OPENSSL_cleanse in:
../libcrypto.a(mem_clr.o)
../libcrypto.a(x86_64cpuid.o)
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [link_app.] Error 1
make[1]: *** [openssl] Error 2
make: *** [build_apps] Error 1
问题似乎源于链接器,但话又说回来,我仍然是命令行新手 那么,鉴于此错误,需要更改哪些内容才能完全编译OpenSSL 1.0.1j? 当采用自动配置路由(./config)时,会出现以下错误:
cc -I.. -I../.. -I../modes -I../asn1 -I../evp -I../../include -DOPENSSL_THREADS -D_REENTRANT
DDSO_DLFCN -DHAVE_DLFCN_H -arch i386 -O3 -fomit-frame-pointer -DL_ENDIAN
DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m
DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DRMD160_ASM -DAES_ASM -DVPAES_ASM -DWHIRLPOOL_ASM
DGHASH_ASM -c -o obj_xref.o obj_xref.c
ar r ../../libcrypto.a o_names.o obj_dat.o obj_lib.o obj_err.o obj_xref.o
ar: ../../libcrypto.a is a fat file (use libtool(1) or lipo(1) and ar(1) on it)
ar: ../../libcrypto.a: Inappropriate file type or format
make[2]: *** [lib] Error 1
make[1]: *** [subdirs] Error 1
make: *** [build_crypto] Error 1
更新:“问题”文档建议更改apps / Makefile和test / Makefile中的两行:
"LIBCRYPTO= -L.. -lcrypto"
"LIBSSL=-L -lssl"
为:
"LIBCRYPTO=../libcrypto.a"
"LIBSSL=../libssl.a"
之后重新尝试制作相同的信息。
我真诚地感谢jww,Jonathan L.和其他人的帮助和评论。如果错误仍然存在,我将继续搜索缺失的信息并最终发布解决方案。
答案 0 :(得分:3)
我不确定你的问题是什么。在Yosemite 10.10.1上使用XCode 6(6.1.1,我相信),我能够从OpenSSL.org获得openssl-1.0.1j
并提取它。然后我用它配置了它:
./Configure --prefix=/usr/openssl/openssl-1.0.1j darwin64-x86_64-cc zlib threads shared
通过这些,我能够毫无问题地构建,测试和安装。这与你所做的非常接近;我只是注意到了zlib(压缩)和请求的线程和共享库支持的存在 - 并指定了一个稍微偏僻的位置来安装它。 (使用--prefix
指定的顶级目录已存在,但为空。)我尝试将sctp
添加到配置选项,但没有骰子 - 缺少SCTP标头,所以我没有打扰进一步尝试。