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

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 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题