【发布时间】:2014-05-05 06:22:48
【问题描述】:
我正在尝试为围绕 libcrypto.a 的 android 包装器构建一个动态库,如
中所述http://wiki.openssl.org/index.php/FIPS_Library_and_Android#Using_FIPS_OpenSSL_in_a_real_Application
我已经按照页面上的建议生成了 libcrypto.a,但是当我尝试编译我的 wrapper.c 时出现链接器错误,'atexit' 的多个定义
这是我用来编译的命令行:
arm-linux-androideabi-gcc wrapper.c -fPIC -shared -I/usr/local/ssl/android-14/include -Wl,-Bstatic -lcrypto -L/usr/local/ssl/android-14/lib -o libwrapper.so --sysroot=/Users/scoleman/android-ndk-r9d/platforms/android-14/arch-arm -Wl, -Bdynamic
结果如下:
/Users/scoleman/android-ndk-r9d/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: /Users/scoleman/android-ndk-r9d/platforms/android-14/arch-arm/usr/lib/libc.a(atexit.o): multiple definition of 'atexit'
/Users/scoleman/android-ndk-r9d/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: /Users/scoleman/android-ndk-r9d/platforms/android-14/arch-arm/usr/lib/crtbegin_so.o: previous definition here
/Users/scoleman/android-ndk-r9d/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: cannot find -ldl
collect2: ld returned 1 exit status
这是我的 wrapper.c:
#include <string.h>
#include <jni.h>
int MY_FIPS_mode() {
int mode = mode = FIPS_mode();
return mode;
}
【问题讨论】:
-
废话....您的
-Wl, -Bdynamic中有一个空格。删除空格。 -
现在也可以使用:OpenSSL and Android。它删除了不相关的 FIPS 内容。
标签: android android-ndk openssl wrapper linker-errors