pdi*_*ddy 2 c c++ android swig android-ndk
我有一个非常简单的CPP类和一个从我的CPP类调用的C函数.此外,我正在使用SWIG生成JAVA和本机之间的粘合代码.
但是当我尝试使用NDK编译它时如果编译失败并出现以下错误:
Android NDK: WARNING: APP_PLATFORM android-19 is larger than android:minSdkVersion 16 in ./AndroidManifest.xml
[armeabi] Compile++ thumb: swig_module <= swig_wrap.cpp
[armeabi] Compile++ thumb: swig_module <= myclass.cpp
[armeabi] Compile thumb : swig_module <= test.c
[armeabi] StaticLibrary : libstdc++.a
[armeabi] SharedLibrary : libswig_module.so
/Users/xxxxxxx/Documents/Android/adt-bundle-mac-x86_64-20131030/ndk/android-ndk-r9b/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs/swig_module/src/myclass.o: in function myclass::foo():jni/src/myclass.cpp:6: error: undefined reference to 'mult(int, int)'
collect2: ld returned 1 exit status
make: *** [obj/local/armeabi/libswig_module.so] Error 1
Run Code Online (Sandbox Code Playgroud)
所以这是代码:
**test.h**
int mult(int a, int b);
**test.c**
#include "test.h"
int mult(int a, int b)
{
return a * b;
}
**myclass.h**
class myclass
{
public:
int foo();
};
**myclass.cpp**
#include "myclass.h"
#include "test.h"
int myclass::foo()
{
return mult(5,5);
}
**Android.mk**
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := swig_module
LOCAL_SRC_FILES := swig_wrap.cpp src/myclass.cpp src/test.c
include $(BUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)
使用以下命令从SWIG生成swig_wrap.cpp文件
swig -java -c++ -package com.example.swigtest.swiggen -outdir src/com/example/swigtest/swiggen/ -o jni/swig_wrap.cpp jni/swig.i
**swig.i**
%module swig_module
%{
#include "src/myclass.h"
%}
%include "src/myclass.h"
Run Code Online (Sandbox Code Playgroud)
我可以用g ++编译原生代码,没有任何问题,但使用NDK它无法正常工作.
我真的需要这个才能工作,因为我想使用SWIG导演功能进行回调(我这里没有展示,只是为了让事情尽可能简单).
任何帮助表示赞赏.
您正在使用C编译器构建test.c,C++代码无法查看C函数,除非您添加extern "C"以让C++链接器知道它是C.
做这个:
test.h:
#ifdef __cplusplus
#define EXTERN extern "C"
#else
#define EXTERN
#endif
EXTERN int mult(int a, int b);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2585 次 |
| 最近记录: |