交叉编译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中到底哪一个被默认设置