版本:
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
--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動態庫,感覺到惡意後,刪除
編譯通過了,又學到了一點,程序編譯的時候默認鏈接動態庫