我在开发人员世界中(对于Linux和交叉编译)还是一个新手,我正尝试为ARM Android设备交叉编译OpenSSL库,以便以后在另一个项目中使用它。为此,我使用了android提供的NDK r17c预构建工具链。我需要使用该库,因为我已经使用该工具链交叉编译了其他库,并且需要在同一项目中使用所有库。
我以前尝试过使用其他NDK版本(15c,18b ..),但没有人能更好地工作。我还尝试了以前构建的独立工具链,该工具链可与clang编译器一起使用,但不适用于gcc one。就像我之前说的,最后我不能使用这个独立的工具链,因为我用预先构建的工具链交叉编译了库的主要部分(只有OpenSSL和libssh2尚未编译)。
因此,为了进行编译,我使用如下所示的OpenSSL的Configure文件:
./Configure os/compiler:/home/user/Documents/NDK/android-ndk-r17c-linux-x86_64/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc \
--prefix=/home/user/Documents/SSLcompile threads \
-I/home/user/Documents/NDK/android-ndk-r17c-linux-x86_64/android-ndk-r17c/sysroot/usr/include \
-L/home/user/Documents/NDK/android-ndk-r17c-linux-x86_64/android-ndk-r17c/sysroot/usr/lib/arm-linux-androideabi
然后我继续执行“ makedepend”,它开始工作,然后“ make”(或“ make install”)失败了。
我遇到了这些错误,但无法解决:
/home/user/Documents/NDK/android-ndk-r17c-linux-x86_64/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: error: cannot open crtbegin_dynamic.o: No such file or directory
/home/user/Documents/NDK/android-ndk-r17c-linux-x86_64/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: error: cannot open crtend_android.o: No such file or directory
我知道这些文件在路径中
/home/user/Documents/NDK/android-ndk-r17c-linux-x86_64/android-ndk-r17c/platforms/android-21/arch-arm/usr/lib
但是我尝试提供配置路径的所有操作都失败了。
您能为我提供一些我错过的元素吗?我做不正确的事情吗?
谢谢!
答案 0 :(得分:0)
因此,感谢this topic,我认为我取得了进步,并且解决了这个问题。要链接这些文件,我将--sysroot =参数添加为:
--sysroot=$NDK/platforms/android-21/arch-arm
它为我解决了这些错误“无法打开...没有这样的文件或目录”。
这可能不是每个人的好答案,当然也不是最好的答案,但是对我来说,尽管我遇到了新的错误(“对pthread_atfork的未定义引用”),但它可以纠正此问题。
-编辑
我现在使用Android NDK r19交叉编译我的库,这很容易,而且我们不需要更改很多东西或构建独立的工具链,也不再需要传递任何参数来交叉编译OPENSSL库仅适用于armv7 Android:
./Configure os/compiler:/home/user/Documents/NDK/android-ndk-r19/toolchains/llvm/prebuilt/linux-x86_64/bin/arm-linux-androideabi-clang --prefix=/home/user/Documents/SSLcompile threads
(文件arm-linux-androideabi-clang是到armv7a-linux-androideabi22-clang的符号链接)