libxml2,openssl,libssh2交叉編譯

版本:

libxml2-2.9.1

openssl-1.0.1e

libssh2-1.4.3


linux下的開源軟件的編譯比較統一,一般分爲如下幾步

./configure;make;make install

如果是交叉編譯需要考慮,1.指定交叉編譯工具的PATH 2.指定交叉編譯工具CC

3.交叉編譯的架構host 4.編譯輸出目錄  

如下腳本:


#!/bin/bash

export PATH=$PATH:/opt/ppc/eldk4.2/usr/bin
PREPATH=${PWD}
rm ${PREPATH}/Output -rf
mkdir ${PREPATH}/Output

chmod +x configure

./configure \
	CC=ppc_85xxDP-gcc \
	--host=powerpc-linux \
	--prefix=${REPATH}/Output 
make
make install


有的configure配置的時候默認includedir和libdir是根據prefix來的
 --includedir=DIR        C header files [PREFIX/include]

所以會找不到庫和頭文件

一、libxml2編譯

按照上面腳本,改好相關參數,沒有出現問題


二、openssl編譯

這套軟件就沒有按套路出牌,出現了Configure和config兩個腳本

1.配置

./Configure \
	--prefix=/opt/ppc/eldk4.2/ppc_85xxDP/usr \
	os/compiler:ppc_85xxDP-gcc	\
	shared	


./config \
	linux-ppc	\
	--prefix=/opt/ppc/eldk4.2/ppc_85xxDP/usr \
	--openssldir=/opt/ppc/eldk4.2/ppc_85xxDP/usr/openssl \
	CC=ppc_85xxDP-gcc	\
	AR=ppc_85xxDP-ar	\
	RANLIB=ppc_85xxDP-ranlib \
	shared	\
	no-asm 
	

雖然有兩個腳本,但還是不完善,所以指定了一大堆工具和路徑

os/compiler:ppc_85xxDP-gcc 指定交叉編譯器和架構類型

雖然加了shared參數,但最終還是沒生成動態庫

2.修改Makefile

添加如下定義來指定交叉編譯

CROSS_COMPILE= ppc_85xxDP- 

經過這兩步纔可以make和make install,還是說的,這個庫的編譯爲什麼感覺這麼low?


三、libssh2

這個源碼包裏有configure,編譯結果彷彿呼之欲出...

1.配置

./configure \
	CC=ppc_85xxDP-gcc \
	--host=powerpc-linux \
	--prefix=/opt/ppc/eldk4.2/ppc_85xxDP/usr \
	--includedir=/opt/ppc/eldk4.2/ppc_85xxDP/usr/include \
	--libdir=/opt/ppc/eldk4.2/ppc_85xxDP/usr/lib	\
	--disable-examples-build 
#	--with-libssl-prefix=/opt/ppc/eldk4.2/ppc_85xxDP/usr	
#	--without-libgcrypt \
make
make install
經過一些亂七八糟的錯誤後,建立了上面的配置

我覺得已經無懈可擊了,但我還是卡在了下面的錯誤上

make[1]: Entering directory `/home/kevin/works/projects/ACCUMULATION/xml2_openssl/libssh2-1.4.3/tests'
/bin/bash ../libtool --tag=CC   --mode=link ppc_85xxDP-gcc  -g -O2   -o ssh2 ssh2.o ../src/libssh2.la 
libtool: link: ppc_85xxDP-gcc -g -O2 -o ssh2 ssh2.o  ../src/.libs/libssh2.a -L/opt/ppc/eldk4.2/ppc_85xxDP/usr/lib -lssl -lcrypto -lz
../src/.libs/libssh2.a(openssl.o): In function `aes_ctr_cleanup':
/home/kevin/works/projects/ACCUMULATION/xml2_openssl/libssh2-1.4.3/src/openssl.c:306: undefined reference to `EVP_CIPHER_CTX_get_app_data'
../src/.libs/libssh2.a(openssl.o): In function `aes_ctr_do_cipher':
/home/kevin/works/projects/ACCUMULATION/xml2_openssl/libssh2-1.4.3/src/openssl.c:267: undefined reference to `EVP_CIPHER_CTX_get_app_data'
../src/.libs/libssh2.a(openssl.o): In function `aes_ctr_init':
/home/kevin/works/projects/ACCUMULATION/xml2_openssl/libssh2-1.4.3/src/openssl.c:257: undefined reference to `EVP_CIPHER_CTX_set_app_data'
../src/.libs/libssh2.a(openssl.o): In function `_libssh2_cipher_crypt':
/home/kevin/works/projects/ACCUMULATION/xml2_openssl/libssh2-1.4.3/src/openssl.c:192: undefined reference to `EVP_Cipher'
collect2: ld returned 1 exit status
make[1]: *** [ssh2] Error 1
make[1]: Leaving directory `/home/kevin/works/projects/ACCUMULATION/xml2_openssl/libssh2-1.4.3/tests'
make: *** [install-recursive] Error 1
提示未定義的函數,於是查找了一下庫裏的內容

kevin@fzs:~/works/projects/ACCUMULATION/xml2_openssl/libssh2-1.4.3$ readelf -s /opt/ppc/eldk4.2/ppc_85xxDP/usr/lib/libssl.a |grep EVP_Cipher
    20: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND EVP_Cipher
    36: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND EVP_CipherInit_ex
    45: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND EVP_Cipher
    38: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND EVP_CipherInit_ex
    52: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND EVP_Cipher
    18: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND EVP_Cipher
明明有啊,爲什麼提示找不到,爲什麼?

莫名其妙的卡了一整天

最後我發現在/opt/ppc/eldk4.2/ppc_85xxDP/usr/lib下面有個libssl.so

原來,工具鏈裏面有個老的libssl動態庫,感覺到惡意後,刪除

編譯通過了,又學到了一點,程序編譯的時候默認鏈接動態庫





















發佈了121 篇原創文章 · 獲贊 39 · 訪問量 50萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章