Tongsuo icon indicating copy to clipboard operation
Tongsuo copied to clipboard

编译缺少文件

Open sslvpn007 opened this issue 2 years ago • 41 comments

编译缺少 #include <crypto/cryptodev.h>

能不能自己先试下啊,别的错误可以自己改,但缺失文件就不好整了

版本:8.3.1

@InfoHunter

sslvpn007 avatar Jul 26 '22 08:07 sslvpn007

config 参数加上 no-devcryptoeng 试试

wa5i avatar Jul 26 '22 09:07 wa5i

openssl 的 cryptodev 好像是 opt-in
-DHAVE_CRYPTODEV -DUSE_CRYPTODEV_DIGESTS

BabaSSL 的 cryptodev 是 opt-out 吗

xuyang2 avatar Jul 26 '22 09:07 xuyang2

openssl 的 cryptodev 好像是 opt-in -DHAVE_CRYPTODEV -DUSE_CRYPTODEV_DIGESTS

BabaSSL 的 cryptodev 是 opt-out 吗

BabaSSL 在这块没有改动,应该跟 openssl 一致。

wa5i avatar Jul 26 '22 09:07 wa5i

LIB_LDFLAGS=-shared -Wl,-Bsymbolic $(CNF_LDFLAGS) $(LDFLAGS)

去掉了cryptodev,编译到最后报错:

ld: unknown option: -Bsymbolic

sslvpn007 avatar Jul 26 '22 09:07 sslvpn007

但缺失文件就不好整了

<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

InfoHunter avatar Jul 26 '22 09:07 InfoHunter

BabaSSL/OpenSSL编译并且install之后的include目录下只有openssl一个子目录,也就是只有#include <openssl/xxxxx.h>是自有头文件,其他的都不是本项目内的头文件

InfoHunter avatar Jul 26 '22 09:07 InfoHunter

devcrypto 这个engine只能在BSD内核的系统下编译使用,不能在Linux下编译

我查了一下,如果要是非要在Linux下用这个的话,似乎得安装这个:https://github.com/cryptodev-linux/cryptodev-linux

不过不确定兼容性如何,因为cryptodev是*BSD原生的

InfoHunter avatar Jul 26 '22 10:07 InfoHunter

我是在mac os 下编译

sslvpn007 avatar Jul 26 '22 10:07 sslvpn007

主要用在苹果设备上

sslvpn007 avatar Jul 26 '22 10:07 sslvpn007

那你要确定下mac os下有没有对/dev/crypto的相关支持。目前BabaSSL对macOS的支持只限于非engine的本体部分,这个是没问题的。严格来讲,engine属于BabaSSL本体之外的三方模块,一般强依赖于具体操作系统的环境(以及硬件支持),这个要根据系统的版本和实际情况做适配

InfoHunter avatar Jul 26 '22 10:07 InfoHunter

LIB_LDFLAGS=-shared -Wl,-Bsymbolic (CNFLDFLAGS)(LDFLAGS)

去掉了cryptodev,编译到最后报错:

ld: unknown option: -Bsymbolic

编译到最后,出现这个错误

如果,把这些选项去掉,有没有什么影响?

sslvpn007 avatar Jul 26 '22 10:07 sslvpn007

ld: unknown option: -soname=libcrypto.so.1.1

去掉makefile里的 Bsymbolic后,会报上面的错

sslvpn007 avatar Jul 26 '22 10:07 sslvpn007

你用的是什么编译器?

InfoHunter avatar Jul 26 '22 10:07 InfoHunter

CC=/Applications/Xcode.app/Contents/Developer/usr/bin/gcc -arch armv7s

sslvpn007 avatar Jul 26 '22 10:07 sslvpn007

我这样编译过GMSSL,是没有问题的。

sslvpn007 avatar Jul 27 '22 01:07 sslvpn007

我这样编译过GMSSL,是没有问题的。

BabaSSL 与 GMSSL 是两个不同的开源项目,BabaSSL fork from openssl,要参考也是参考 openssl 的编译方式,看看这个文档:https://github.com/BabaSSL/BabaSSL/blob/master/doc/openssl/INSTALL

wa5i avatar Jul 27 '22 01:07 wa5i

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

wa5i avatar Jul 27 '22 02:07 wa5i

只要是编译适配iPhone以及ipad、mac os 几个平台的静态库

sslvpn007 avatar Jul 27 '22 02:07 sslvpn007

只要是编译适配iPhone以及ipad、mac os 几个平台的静态库

那可以这样:

./Configure ios-cross

可能需要在 Makefile 中修改一下 CNF_CFLAGS,之后再 make

wa5i avatar Jul 27 '22 02:07 wa5i

我昨天编译了下,基本是到了最后,报错了 去掉了cryptodev,编译到最后报错:

ld: unknown option: -Bsymbolic

sslvpn007 avatar Jul 27 '22 03:07 sslvpn007

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$

sslvpn007 avatar Jul 27 '22 03:07 sslvpn007

我这么编译是成功的:

# 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

wa5i avatar Jul 27 '22 03:07 wa5i

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$

sslvpn007 avatar Jul 27 '22 04:07 sslvpn007

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

wa5i avatar Jul 27 '22 05:07 wa5i

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里的修改

sslvpn007 avatar Jul 27 '22 06:07 sslvpn007

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 这两个变量设置了吗

wa5i avatar Jul 27 '22 06:07 wa5i

都设置了

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

sslvpn007 avatar Jul 27 '22 07:07 sslvpn007

都设置了

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/ 报什么错?

wa5i avatar Jul 27 '22 07:07 wa5i

可以了,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

sslvpn007 avatar Jul 27 '22 08:07 sslvpn007

是不是可以通过去掉poly1305 来规避这个问题?

sslvpn007 avatar Jul 27 '22 08:07 sslvpn007