小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

libCurl/openssl/Zlib的ARM移植

 lao_o 2010-07-23

本人使用環(huán)境

Host linux(from ubuntu):

jeos[just enougth OS]

交叉編譯器:

/opt/timesys/toolchains/armv5l-linux/bin/armv5l-linux-gcc

target Processor:

ARM926EJ-S rev 5 (v5l)

Hardware:

Atmel AT91SAM9260-EK

先開始libCurl 的移植過程:

下載curl-7.20.0.tar.bz2解壓至本目錄,開始configure,由于之前一直發(fā)現(xiàn)配置不過,出現(xiàn)多次錯誤,這里直接給出正確的配置:

cd curl-7.20.0 && ./configure --prefix=/win/530/curl/build --build=i686-linux --host=arm-linux CC=/opt/timesys/toolchains/armv5l-linux/bin/armv5l-linux-gcc CFLAGS='-Os' --enable-debug --enable-optimize --enable-static --disable-ftp --without-zlib --disable-rtsp --disable-dict --disable-proxy --disable-telnet --disable-tftp   --disable-pop3   --disable-imap   --disable-smtp   --disable-ipv6 --enable-http   -enable-crypto-auth --without-gnutls --without-nss --without-ca-bundle --with-random=/dev/urandom export LDFLAGS="-static
-L/opt/timesys/toolchains/armv5l-linux/lib" &&

configure碰到的錯誤:
1.checking for "/dev/urandom"... configure: error: cannot check for file existence when cross compiling

google后發(fā)現(xiàn)答案:
http://www./forum/topic/137

按照回答,由于是在主機上配置、編譯,所以配置期間沒找到 適合于目標系統(tǒng)的隨機數(shù)生成器,具體在/dev/urandom下面,但是我找了下,確實是有的:

[root@openssl]# ls -al /dev/urandom
crw-rw-rw- 1 root root 1, 9 Jan 12 17:12 /dev/urandom

[root@openssl]# file /dev/urandom
/dev/urandom: character special

引用回答的原文:
#You may need to provide a parameter like '--with-random=/dev/urandom' to configure as it cannot detect the presence of a random number generating device for a target system.


2.checking for curl_socklen_t data type... unknown
configure: error: cannot find data type for curl_socklen_t.

在網(wǎng)上找了多次,沒找到解決方法。因為之前編譯的時候使用到庫一直沒指定連接庫,因為這個是有編譯器自己自動連接的,最后靈機一動,想想給加上鏈接庫試試:

LDFLAGS="-static -L/opt/timesys/toolchains/armv5l-linux/lib"

沒想到無奈的問題解決了。

configure編譯后的信息如下

#configure: Configured to build curl/libcurl:
# curl version:    7.20.0
# Host setup:      arm-unknown-linux-gnu
# Install prefix: /win/530/curl
# Compiler:        /opt/timesys/toolchains/armv5l-linux/bin/armv5l-linux-gcc
# SSL support:     enabled (OpenSSL)
# SSH support:     no      (--with-libssh2)
# zlib support:    enabled
# krb4 support:    no      (--with-krb4*)
# GSSAPI support: no      (--with-gssapi)
# SPNEGO support: no      (--with-spnego)
# c-ares support: no      (--enable-ares)
# ipv6 support:    no      (--enable-ipv6)
# IDN support:     no      (--with-libidn)
# Build libcurl:   Shared=yes, Static=yes
# Built-in manual: enabled
# Verbose errors: enabled (--disable-verbose)
# SSPI support:    no      (--enable-sspi)
# ca cert bundle: no
# ca cert path:    no
# LDAP support:    no      (--enable-ldap / --with-ldap-lib / --with-lber-lib)
# LDAPS support:   no      (--enable-ldaps)
# RTSP support:    enabled
# Protocols:       DICT FILE HTTP HTTPS RTSP

編譯安裝

make clean &&make && make install

openssl

下載openssl-0.9.8m.tar.gz解壓至本目錄,開始configure:

./config --prefix=/win/530/curl/openssl/build os/compiler:/opt/timesys/toolchains/armv5l-linux/bin/armv5l-linux-gcc

最開始使用:

CC=/opt/timesys/toolchains/armv5l-linux/bin/armv5l-linux-gcc CFLAGS='-Os' export LDFLAGS="-static -L/opt/timesys/toolchains/armv5l-linux/lib"

打死也編譯不過去,本想改改config/Configure的,但是真的沒法下手:寫的太混亂了。比明朝晚期的朝廷還要O__O"…

后來找到一篇文章

http:///blog/tag/arm/

原來CC需要用os/compiler去指定的!暈倒,最開始在INSTALL里面看到這個選項還不以為然……

但是按照這個方法也不行:

/opt/timesys/toolchains/armv5l-linux/bin/armv5l-linux-gcc -I. -I.. -I../include -DOPENSSL_THREADS -march=pentium    -c -o cryptlib.o cryptlib.c
cryptlib.c:1: error: bad value (pentium) for -march= switch

方法也挺簡單的,起因是-march=pentium這個編譯開關(guān):

搜索Makefile,刪掉這個信息即可。當然主要是這行:

CFLAG= -DOPENSSL_THREADS -march=pentium

前面的都好像沒用處,去掉不去掉都可以。

按照博主的說明,當然最后需要修改

AR= ar $(ARFLAGS) r

AR= /opt/timesys/toolchains/armv5l-linux/bin/armv5l-linux-ar $(ARFLAGS) r

不修改也編譯的過去,估計連接的庫是適合于x86的吧。

到libcurl下載簡單的c文件,寫好Mikefile后,加載到目標機上運行:

# ./t
./t: error while loading shared libraries: libssl.so.5: cannot open shared object file: No such file or directory

我暈倒。。然后開始編譯 ssl庫見上面的編譯方法。編譯期間偶然在/opt/timesys/toolchains/armv5l-linux/armv5l-linux/lib找到了鏈接庫

libssl.so         libssl.so.0.9.7f libssl.so.5      

我暈。。估計是因為編譯libcurl的時候沒注意使用靜態(tài)加載,本想拷貝他到目標機,讓程序到當前目錄加載的(默認的/lib /usr/lib都為只讀),可惜依然沒辦法跑起來,隨即修改

LDFLAGS="-static -L/opt/timesys/toolchains/armv5l-linux/lib"

LDFLAGS="-static -L/opt/timesys/toolchains/armv5l-linux/armv5l-linux/lib -static -lz -static -lssl"

再試試:

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多