Tongsuo
Tongsuo copied to clipboard
编译缺少文件
编译缺少 #include <crypto/cryptodev.h>
能不能自己先试下啊,别的错误可以自己改,但缺失文件就不好整了
版本:8.3.1
@InfoHunter
config 参数加上 no-devcryptoeng 试试
openssl 的 cryptodev 好像是 opt-in
-DHAVE_CRYPTODEV
-DUSE_CRYPTODEV_DIGESTS
BabaSSL 的 cryptodev 是 opt-out 吗
openssl 的 cryptodev 好像是 opt-in
-DHAVE_CRYPTODEV
-DUSE_CRYPTODEV_DIGESTS
BabaSSL 的 cryptodev 是 opt-out 吗
BabaSSL 在这块没有改动,应该跟 openssl 一致。
LIB_LDFLAGS=-shared -Wl,-Bsymbolic $(CNF_LDFLAGS) $(LDFLAGS)
去掉了cryptodev,编译到最后报错:
ld: unknown option: -Bsymbolic
但缺失文件就不好整了
<crypto/cryptodev.h> 是BSD内核的操作系统自带的头文件,不是BabaSSL的头文件。devcrypto 这个engine只能在BSD内核的系统下编译使用,不能在Linux下编译。例如在OpenBSD中,cryptodev.h是这样的:
https://github.com/openbsd/src/blob/master/sys/crypto/cryptodev.h
devcrypto这个engine是来让BabaSSL驱动和使用BSD内核中的硬件密码设备用的,具体可以参考FreeBSD的文档:
https://www.freebsd.org/cgi/man.cgi?query=crypto&sektion=4&format=html
BabaSSL/OpenSSL编译并且install之后的include目录下只有openssl一个子目录,也就是只有#include <openssl/xxxxx.h>
是自有头文件,其他的都不是本项目内的头文件
devcrypto 这个engine只能在BSD内核的系统下编译使用,不能在Linux下编译
我查了一下,如果要是非要在Linux下用这个的话,似乎得安装这个:https://github.com/cryptodev-linux/cryptodev-linux
不过不确定兼容性如何,因为cryptodev是*BSD原生的
我是在mac os 下编译
主要用在苹果设备上
那你要确定下mac os下有没有对/dev/crypto的相关支持。目前BabaSSL对macOS的支持只限于非engine的本体部分,这个是没问题的。严格来讲,engine属于BabaSSL本体之外的三方模块,一般强依赖于具体操作系统的环境(以及硬件支持),这个要根据系统的版本和实际情况做适配
LIB_LDFLAGS=-shared -Wl,-Bsymbolic (CNFLDFLAGS)(LDFLAGS)
去掉了cryptodev,编译到最后报错:
ld: unknown option: -Bsymbolic
编译到最后,出现这个错误
如果,把这些选项去掉,有没有什么影响?
ld: unknown option: -soname=libcrypto.so.1.1
去掉makefile里的 Bsymbolic后,会报上面的错
你用的是什么编译器?
CC=/Applications/Xcode.app/Contents/Developer/usr/bin/gcc -arch armv7s
我这样编译过GMSSL,是没有问题的。
我这样编译过GMSSL,是没有问题的。
BabaSSL 与 GMSSL 是两个不同的开源项目,BabaSSL fork from openssl,要参考也是参考 openssl 的编译方式,看看这个文档:https://github.com/BabaSSL/BabaSSL/blob/master/doc/openssl/INSTALL
CC=/Applications/Xcode.app/Contents/Developer/usr/bin/gcc -arch armv7s
如果没有特殊要求,最简单的编译命令如下:
./config && make
如果需要一些功能再根据需要在 config 后面加 enable 参数即可,比如开启国密和关闭devcryptoeng:
./config enable-ntls no-devcryptoeng && make
其他参数请参考:https://github.com/BabaSSL/BabaSSL/blob/master/doc/openssl/INSTALL#L136
只要是编译适配iPhone以及ipad、mac os 几个平台的静态库
只要是编译适配iPhone以及ipad、mac os 几个平台的静态库
那可以这样:
./Configure ios-cross
可能需要在 Makefile 中修改一下 CNF_CFLAGS,之后再 make
我昨天编译了下,基本是到了最后,报错了 去掉了cryptodev,编译到最后报错:
ld: unknown option: -Bsymbolic
clang: warning: argument unused during compilation: '-pthread' clang: warning: argument unused during compilation: '-pthread' ld: unknown option: -Bsymbolic clang: error: linker command failed with exit code 1 (use -v to see invocation) make[1]: *** [libcrypto.so] Error 1 make: *** [all] Error 2 ShrimpdeMac-3:BabaSSL-8.3.1 Shrimp$
我这么编译是成功的:
# CC=llvm-gcc AR=llvm-ar ./Configure ios-cross
# CROSS_TOP=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer CROSS_SDK=iPhoneOS.sdk make -j32
ypto/sha/sha512-armv4.o crypto/sha/sha512-armv4.S llvm-ar r libcrypto.a crypto/aes/aes-armv4.o crypto/aes/aesv8-armx.o crypto/aes/bsaes-armv7.o crypto/armcap.o crypto/armv4cpuid.o crypto/bn/armv4-gf2m.o crypto/bn/armv4-mont.o crypto/chacha/chacha-armv4.o crypto/cversion.o crypto/ec/ecp_nistz256-armv4.o crypto/ec/ecp_nistz256.o crypto/modes/ghash-armv4.o crypto/modes/ghashv8-armx.o crypto/poly1305/poly1305-armv4.o crypto/sha/keccak1600-armv4.o crypto/sha/sha1-armv4-large.o crypto/sha/sha256-armv4.o crypto/sha/sha512-armv4.o make[1]: llvm-ar: No such file or directory make[1]: *** [libcrypto.a] Error 1 make: *** [all] Error 2 ShrimpdeMac-3:BabaSSL-8.3.1 Shrimp$
ypto/sha/sha512-armv4.o crypto/sha/sha512-armv4.S llvm-ar r libcrypto.a crypto/aes/aes-armv4.o crypto/aes/aesv8-armx.o crypto/aes/bsaes-armv7.o crypto/armcap.o crypto/armv4cpuid.o crypto/bn/armv4-gf2m.o crypto/bn/armv4-mont.o crypto/chacha/chacha-armv4.o crypto/cversion.o crypto/ec/ecp_nistz256-armv4.o crypto/ec/ecp_nistz256.o crypto/modes/ghash-armv4.o crypto/modes/ghashv8-armx.o crypto/poly1305/poly1305-armv4.o crypto/sha/keccak1600-armv4.o crypto/sha/sha1-armv4-large.o crypto/sha/sha256-armv4.o crypto/sha/sha512-armv4.o make[1]: llvm-ar: No such file or directory make[1]: *** [libcrypto.a] Error 1 make: *** [all] Error 2 ShrimpdeMac-3:BabaSSL-8.3.1 Shrimp$
这样试试:
CC=llvm-gcc AR=ar ./Configure ios-cross
CROSS_COMPILE= CC=llvm-gcc CXX= CPPFLAGS=$(SYSTEM_CIPHERS_FILE_DEFINE) CFLAGS=-O3 CXXFLAGS= LDFLAGS= EX_LIBS=
MAKEDEPEND=$(CROSS_COMPILE)cc
PERL=perl
AR=ar ARFLAGS= r RANLIB=$(CROSS_COMPILE)ranlib -c RC= $(CROSS_COMPILE)windres RCFLAGS= "Makefile" 9650L, 557959C written
这是makefile里的修改
CROSS_COMPILE= CC=llvm-gcc CXX= CPPFLAGS=$(SYSTEM_CIPHERS_FILE_DEFINE) CFLAGS=-O3 CXXFLAGS= LDFLAGS= EX_LIBS=
MAKEDEPEND=$(CROSS_COMPILE)cc
PERL=perl
AR=ar ARFLAGS= r RANLIB=$(CROSS_COMPILE)ranlib -c RC= $(CROSS_COMPILE)windres RCFLAGS= "Makefile" 9650L, 557959C written
这是makefile里的修改
CROSS_TOP 和 CROSS_SDK 这两个变量设置了吗
都设置了
1、./Configure ios-cross no-devcryptoeng ,生成makefile 2、编辑makefile: 2.1、修改CC=llvm-gcc 2.2、修改AR=ar 2.3、在CC 下一行,增加 CROSS_TOP=CROSS_TOP=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/ CROSS_SDK=iPhoneOS.sdk 3、保存退出Makefile 4、make -j32
都设置了
1、./Configure ios-cross no-devcryptoeng ,生成makefile 2、编辑makefile: 2.1、修改CC=llvm-gcc 2.2、修改AR=ar 2.3、在CC 下一行,增加 CROSS_TOP=CROSS_TOP=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/ CROSS_SDK=iPhoneOS.sdk 3、保存退出Makefile 4、make -j32
是 CROSS_TOP=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/
,不是 CROSS_TOP=CROSS_TOP=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/
报什么错?
可以了,ios-cross 编译出来的是armv7的指令集
但我在编译arm64的指令集的时候,报错:
./Configure ios64-cross no-devcryptoeng,其他的步骤和上面一样,错误如下:
IC -DOPENSSL_CPUID_OBJ -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DVPAES_ASM -DECP_NISTZ256_ASM -DPOLY1305_ASM -DSM3_ASM -DSM4_ASM -DOPENSSLDIR=""//Users/Shrimp/Desktop/babassl/arm64"" -DENGINESDIR=""//Users/Shrimp/Desktop/babassl/arm64/lib/engines-1.1"" -D_REENTRANT -DNDEBUG -c -o crypto/poly1305/poly1305-armv8.o crypto/poly1305/poly1305-armv8.S crypto/poly1305/poly1305-armv8.S:47:10: error: unqualified, assembler-local label name expected adr x12,_poly1305_blocks ^ crypto/poly1305/poly1305-armv8.S:48:9: error: unqualified, assembler-local label name expected adr x7,poly1305_blocks_neon ^ crypto/poly1305/poly1305-armv8.S:49:10: error: unqualified, assembler-local label name expected adr x13,_poly1305_emit ^ crypto/poly1305/poly1305-armv8.S:50:9: error: unqualified, assembler-local label name expected adr x8,poly1305_emit_neon ^ make[1]: *** [crypto/poly1305/poly1305-armv8.o] Error 1 make: *** [all] Error 2
是不是可以通过去掉poly1305 来规避这个问题?