雨落 2014-04-25 02:02 采纳率: 0%
浏览 17784

NDK开发的时候遇到error: undefined reference to 错误

大家好,我在正在将C++的一些代码通过ndk调用到android项目里面去,但是在出现了一个很奇怪的错误;

/bin/ld: ./obj/local/armeabi/objs/TestNDK2/TestNDK2.o: in function Java_com_example_testndk2_MainActivity_stringTestNdk(_JNIEnv*, _jobject*):jni/TestNDK2.cpp:15: error: undefined reference to 'CFeatureExtract::CFeatureExtract()'

collect2: ld returned 1 exit status
make: *** [obj/local/armeabi/libTestNDK2.so] Error 1

我调用jni的文件代码为:

#include <string.h>

#include "FeatureExtract.h"
#include "Output.h"
#include

jstring
Java_com_example_testndk2_MainActivity_stringTestNdk( JNIEnv* env,
jobject thiz )
{

COutput * pout;
pout = new COutput();
CFeatureExtract  *pFtr;
pFtr=new CFeatureExtract();
return (env)->NewStringUTF("Hello from JNI and anbo !");

}

mk文件也编写好了,应该没什么问题,之所以说没问题是因为,我在上面调用了其他cpp文件的 output.cpp和FeatureExtract.cpp等好几个cpp文件,当我把
pFtr=new CFeatureExtract();
这行去掉的时候,会发现不再报错。下面是我的mk的代码:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := libFeatureExtract
LOCAL_SRC_FILES := OnlineFtr.cpp OnlineNorm.cpp FeatureExtract.cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include

include $(BUILD_STATIC_LIBRARY)

include $(CLEAR_VARS)

LOCAL_MODULE := libOutput
LOCAL_SRC_FILES := LQDFR.cpp Classifier.cpp Output.cpp

include $(BUILD_STATIC_LIBRARY)

include $(CLEAR_VARS)

LOCAL_MODULE := TestNDK2
LOCAL_SRC_FILES := TestNDK2.cpp

LOCAL_STATIC_LIBRARIES := libFeatureExtract
LOCAL_STATIC_LIBRARIES := libOutput

include $(BUILD_SHARED_LIBRARY)

最后是我CFeatureExtract构造函数的代码:

CFeatureExtract::CFeatureExtract()

{
nmdir = 0;
nwid = zone*zstep;

pNorm = new COnlineNorm;
pFeatr = new COnlineFtr( nwid );
//edit by anbo
trajnorm = NULL;
new_ptnum =0;
new_ptnum_total=0;
strokeEnd=0;
strokeBegin=0;
countStroke=0;
GaussModel_probability =0;

}

下面是.h头文件的部分声明

class CFeatureExtract{

public:

CFeatureExtract();
~CFeatureExtract();

非常想知道到底哪里错了啊!感谢!

  • 写回答

2条回答

  • 青志 2015-12-03 09:06
    关注

    楼主 问题解决了吗?我这边遇到同样的问题。

    D:\Chrome_Download\android-ndk-r10d\ndk-build.cmd all
    Android NDK: WARNING: APP_PLATFORM android-21 is larger than android:minSdkVersion 10 in ./AndroidManifest.xml

    [armeabi] Compile++ thumb: my-ndk <= my-ndk.cpp
    [armeabi] SharedLibrary : libmy-ndk.so
    jni/my-ndk.cpp:7: error: undefined reference to 'Child::Child()'
    collect2.exe: error: ld returned 1 exit status
    make.exe: *** [obj/local/armeabi/libmy-ndk.so] Error 1

    构造函数 没有定义。明显是定义的。只是使用了多个 *.cpp 文件 链接。 估计就是编译 链接的问题。

    评论

报告相同问题?

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题