为android mips编译libcurl

时间:2014-09-14 15:57:46

标签: android curl ssl android-ndk mips

我已经为3个平台创建了一个为android编译curl的脚本,更像是4:  armv5  2. armv7  3. x86  4. mips

我是在SO中使用这篇文章来做的:enter link description here 对于arm和x86,一切正常(我使用的是ndk工具链和openssl特定的库,我预先为这些平台编译)。 唯一有问题的平台是mips。我得到libcrul.a,la和.so但是在尝试编译可执行文件卷曲时,链接失败了:

libtool: link: mipsel-linux-android-gcc -O2 -Wno-system-headers -o .libs/curl curl-tool_binmode.o curl-tool_bname.o curl-tool_cb_dbg.o curl-tool_cb_hdr.o curl-tool_cb_prg.o curl-tool_cb_rea.o curl-tool_cb_see.o curl-tool_cb_wrt.o curl-tool_cfgable.o curl-tool_convert.o curl-tool_dirhie.o curl-tool_doswin.o curl-tool_easysrc.o curl-tool_formparse.o curl-tool_getparam.o curl-tool_getpass.o curl-tool_help.o curl-tool_helpers.o curl-tool_homedir.o curl-tool_hugehelp.o curl-tool_libinfo.o curl-tool_main.o curl-tool_metalink.o curl-tool_mfiles.o curl-tool_msgs.o curl-tool_operate.o curl-tool_operhlp.o curl-tool_panykey.o curl-tool_paramhlp.o curl-tool_parsecfg.o curl-tool_setopt.o curl-tool_sleep.o curl-tool_urlglob.o curl-tool_util.o curl-tool_vms.o curl-tool_writeenv.o curl-tool_writeout.o curl-tool_xattr.o ../lib/curl-strtoofft.o ../lib/curl-strdup.o ../lib/curl-rawstr.o ../lib/curl-nonblock.o ../lib/curl-warnless.o  -L/usr/local/android-ndk/platforms/android-9/arch-mips/usr/lib -L/home/eyal/devel/openssl/lib ../lib/.libs/libcurl.so -lz
/usr/local/ndk-toolchains/mipsel-linux-android-4.6/bin/../lib/gcc/mipsel-linux-android/4.6/../../../../mipsel-linux-android/bin/ld: warning: libssl.so.1.1.0, needed by ../lib/.libs/libcurl.so, not found (try using -rpath or -rpath-link)
/usr/local/ndk-toolchains/mipsel-linux-android-4.6/bin/../lib/gcc/mipsel-linux-android/4.6/../../../../mipsel-linux-android/bin/ld: warning: libcrypto.so.1.1.0, needed by ../lib/.libs/libcurl.so, not found (try using -rpath or -rpath-link)
../lib/.libs/libcurl.so: undefined reference to `RAND_load_file'
../lib/.libs/libcurl.so: undefined reference to `SSL_CTX_use_certificate'
../lib/.libs/libcurl.so: undefined reference to `X509_load_crl_file'
../lib/.libs/libcurl.so: undefined reference to `SSL_set_fd'
../lib/.libs/libcurl.so: undefined reference to `SSL_set_connect_state'
../lib/.libs/libcurl.so: undefined reference to `SSL_CTX_free'
../lib/.libs/libcurl.so: undefined reference to `X509_free'

还有更多未定义的引用'错误,我饶了你... 该库存在,-L路径是好的,我检查,权限似乎没有问题,并且再次,它适用于arm和x86 for android。 我使用--host=mipsel-linux-android这可能是错的,但似乎它是正确的,.so和.a是建立的,所以事情顺利,但由于某种原因ld可以'在尝试创建和执行时,请求ssl和crypt。

任何人都有任何想法?当尝试使用工具链手动使用libssl编译文件时,我成功了!

10倍。

1 个答案:

答案 0 :(得分:1)

  

../ lib / .libs / libcurl.so:对“RAND_load_file”的未定义引用

这些是OpenSSL功能。你有针对MIPS的OpenSSL交叉编译吗?如果有,是否可以使用?


libtool: link: mipsel-linux-android-gcc -O2 -Wno-system-headers -o .libs/curl curl-tool_binmode.o 
curl-tool_bname.o curl-tool_cb_dbg.o curl-tool_cb_hdr.o curl-tool_cb_prg.o curl-tool_cb_rea.o 
curl-tool_cb_see.o curl-tool_cb_wrt.o curl-tool_cfgable.o curl-tool_convert.o curl-tool_dirhie.o 
curl-tool_doswin.o curl-tool_easysrc.o curl-tool_formparse.o curl-tool_getparam.o 
curl-tool_getpass.o curl-tool_help.o curl-tool_helpers.o curl-tool_homedir.o curl-tool_hugehelp.o 
curl-tool_libinfo.o curl-tool_main.o curl-tool_metalink.o curl-tool_mfiles.o curl-tool_msgs.o 
curl-tool_operate.o curl-tool_operhlp.o curl-tool_panykey.o curl-tool_paramhlp.o 
curl-tool_parsecfg.o curl-tool_setopt.o curl-tool_sleep.o curl-tool_urlglob.o curl-tool_util.o 
curl-tool_vms.o curl-tool_writeenv.o curl-tool_writeout.o curl-tool_xattr.o ../lib/curl-strtoofft.o 
../lib/curl-strdup.o ../lib/curl-rawstr.o ../lib/curl-nonblock.o ../lib/curl-warnless.o 
 -L/usr/local/android-ndk/platforms/android-9/arch-mips/usr/lib -L/home/eyal/devel/openssl/lib 
../lib/.libs/libcurl.so -lz

好的......看起来您指定了libcryptolibssl的路径:

-L/home/eyal/devel/openssl/lib

但它看起来并不像你在实际的库中传递的那样:

-lssl -lcrypto

  

我正在使用--host = mipsel-linux-android这可能是错误的......

这对我来说很好看。以下是Autotools列表told me to use for Android/ARM上的人员:

./configure --build=`./config.guess` --host=arm-linux-androideabi

我希望MIPS能够使用这样的东西,因为Autotools的人传递了这些东西:

./configure --build=`./config.guess` --host=mipsel-linux-android

但我仍然认为你的确可以。