跪求 ~ ~ android ndk 怎么支持 C99~~???

2014-07-15 10:41:01 +08:00
 lotigine
跪求各位大神帮忙看看,弄了好久啊

android-ndk-r9d/ndk-build 总是编译失败

error: undefined reference to '__isoc99_sscanf'


我的android.mk
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_CFLAGS += -std=c99
LOCAL_LDLIBS := -L jni/ -lrsa -lc

LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.c

include $(BUILD_SHARED_LIBRARY)


静态库编译用的是C99
5645 次点击
所在节点    问与答
12 条回复
lotigine
2014-07-15 11:29:57 +08:00
。。。有人在吗。。。。。。
sqbing
2014-07-15 11:40:54 +08:00
在Mac上测试没有遇到sscanf找不到的问题,把你的hello-jni.c和Android.mk贴出来看看
lotigine
2014-07-15 11:53:43 +08:00
@sqbing
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_CFLAGS := -Wall -pedantic -std=c99 -g
LOCAL_LDLIBS := -L jni/ -lrsa -lc
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.c
include $(BUILD_SHARED_LIBRARY)
lotigine
2014-07-15 11:54:40 +08:00
@sqbing
#include <string.h>
#include <jni.h>
#include "librsa.h"
jstring
Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
jobject thiz )
{
#if defined(__arm__)
#if defined(__ARM_ARCH_7A__)
#if defined(__ARM_NEON__)
#define ABI "armeabi-v7a/NEON"
#else
#define ABI "armeabi-v7a"
#endif
#else
#define ABI "armeabi"
#endif
#elif defined(__i386__)
#define ABI "x86"
#elif defined(__mips__)
#define ABI "mips"
#else
#define ABI "unknown"
#endif

rsa_test(0, NULL);
return (*env)->NewStringUTF(env, "tic ttx I " ABI ".");
}
sqbing
2014-07-15 11:58:55 +08:00
你确定你的rsa库编译没问题?
lotigine
2014-07-15 11:58:56 +08:00
@sqbing 我用的是arm-none-linux-gnueabi-gcc 交叉编译 静态库
lotigine
2014-07-15 12:00:04 +08:00
@sqbing 嗯,编译通过了,在linux上能跑
lotigine
2014-07-15 12:11:02 +08:00
@sqbing 不知道是不是我ndk的问题。。。。。
sqbing
2014-07-15 12:20:21 +08:00
你应该在librsa上找原因,或者说在你的编译过程上找原因。
从你的源文件来看,是librsa引用了sscanf这个函数,并且符号被解析为__isoc99_sscanf,NDK中的libc并没有这个符号,所以最后引用错误。
试试使用NDK的工具链编译librsa吧。
lotigine
2014-07-15 12:21:34 +08:00
@sqbing 嗯好的,我再试试看这个
toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gcc
lotigine
2014-07-15 12:25:25 +08:00
@sqbing 不过貌似这个gcc缺失很多东西啊
CC:=/usr/local/android-ndk-r9d/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gcc -std=c99 -lc
提示缺失 stdio.h 等等啊
lotigine
2014-07-15 13:20:11 +08:00
CC:=/usr/local/android-ndk-r9d/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gcc -std=c99 -lc --sysroot=/usr/local/android-ndk-r9d/platforms/android-15/arch-arm/

http://www.kandroid.org/ndk/docs/STANDALONE-TOOLCHAIN.html

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/122683

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX