V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
lotigine
V2EX  ›  问与答

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

  •  
  •   lotigine · 2014-07-15 10:41:01 +08:00 · 5639 次点击
    这是一个创建于 3611 天前的主题,其中的信息可能已经有所发展或是发生改变。
    跪求各位大神帮忙看看,弄了好久啊

    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
    12 条回复    2014-07-15 13:20:11 +08:00
    lotigine
        1
    lotigine  
    OP
       2014-07-15 11:29:57 +08:00
    。。。有人在吗。。。。。。
    sqbing
        2
    sqbing  
       2014-07-15 11:40:54 +08:00
    在Mac上测试没有遇到sscanf找不到的问题,把你的hello-jni.c和Android.mk贴出来看看
    lotigine
        3
    lotigine  
    OP
       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
        4
    lotigine  
    OP
       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
        5
    sqbing  
       2014-07-15 11:58:55 +08:00
    你确定你的rsa库编译没问题?
    lotigine
        6
    lotigine  
    OP
       2014-07-15 11:58:56 +08:00
    @sqbing 我用的是arm-none-linux-gnueabi-gcc 交叉编译 静态库
    lotigine
        7
    lotigine  
    OP
       2014-07-15 12:00:04 +08:00
    @sqbing 嗯,编译通过了,在linux上能跑
    lotigine
        8
    lotigine  
    OP
       2014-07-15 12:11:02 +08:00
    @sqbing 不知道是不是我ndk的问题。。。。。
    sqbing
        9
    sqbing  
       2014-07-15 12:20:21 +08:00
    你应该在librsa上找原因,或者说在你的编译过程上找原因。
    从你的源文件来看,是librsa引用了sscanf这个函数,并且符号被解析为__isoc99_sscanf,NDK中的libc并没有这个符号,所以最后引用错误。
    试试使用NDK的工具链编译librsa吧。
    lotigine
        10
    lotigine  
    OP
       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
        11
    lotigine  
    OP
       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
        12
    lotigine  
    OP
       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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1608 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 17:02 · PVG 01:02 · LAX 10:02 · JFK 13:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.