openssl 交叉编译

交叉编译openssl

需要交叉编译aarch64/arm32版本的openssl,需要在第一个参数位置指定目标架构,–cross-compile-prefix指定了命令前缀,当然这些命令的路径需要在PATH中设置。

	./Configure linux-aarch64 --cross-compile-prefix=aarch64-himix100-linux- --prefix=/data/work/openssl_instasll && make && make install
	./Configure linux-armv4 --cross-compile-prefix=arm-himix200-linux- --prefix=/data/work/openssl_instasll && make && make install

下面是对openssl 一些文件的翻译,方便理解编译规则

NOTES.UNIX

OpenSSL 使用编译器去链接程序和动态库。

OpenSSL产生的Makefil 使用c 编译器命令行命令去链接程序、动态库。由于这个原因,任何传入configuration 脚本的链接器选项都必须满足链接器需要的格式。

动态库和安装目录在非默认位置

每个unix系统都有自身的动态库按照位置,像/lib,/usr/lib 或者 /usr/local/lib。 如果动态库被安装在非默认位置,动态链接的二进制程序将无法找到它们,因此运行失败,除非指定了运行时库搜索路径。

对OpenSSL 应用,我们的配置脚本不会设置运行时库搜索路径。因此,建议大家在配置时,显式的设置它,除非库被安装到你知道的路径下。

运行时动态库搜索路径可以有不同的方式来指定,依据它所运行的系统和版本。

设置运行时动态库搜索路径的可能选项为:

	-Wl,-rpath,/whatever/path  # linux,*BSD
	-R /whatever/path # Solaris
	-Wl,-R,/whatever/path #AIX
	-Wl,+b,/whatever/path  # HP-UX
	-rpath /whatever/path  #Tru64,IRIX

OpenSSL的配置脚本会识别所有的选项,把它们传入到Makefile中。(事实上,以-Wl 开头的所有参数都会被识别为连接器选项)。

请注意,在给出运行时动态库搜索路径时,不要一字不差的使用路径名称。一些OpenSSL 配置会对安装目录添加一个额外的目录。为了方便使用,生成的Makefile中的LIBRPATH变量会包含这些路径,该变量被用于提供运行时动态库路径,用法像下个例子中所示:

./config --prefix=/usr/loca/ssl --openssldir=/usr/local/ssl '-Wl,-rpath,$(LIBRPATH)'

在基于现代ELF格式的系统中,有2种运行时动态库搜索路径标志:DT_RPATH和 DT_RUNPATH.动态搜索库的查找顺序:
1. 使用DT_RPATH指定的目录,除非 DT_RUNPATH也被设置。
2. 使用环境变量 LD_LIBRARY_PATH 指定的目录
3. 使用 DT_RUNPATH 指定的目录
4. 使用系统共享对象缓存和默认目录。
这意味着,如果库在DT_RPATH(DT_RUNPATH没有被设置)指定的路径中被找到,则LD_LIBRARY_PATH指定的路径将不会起作用。

DT_RPATH和DT_RUNPATH中到底哪一个被默认设置࿰

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值