我需要幫助!C和C++ ---未定義的參考
我在接下來的路徑實現的一個.cpp程序:家用/弗吉尼亞州/安卓/ VLC/src目錄/輸入/ virtual.cpp
/*
* virtual.cpp
*/
#include <stdlib.h>
#include <jni.h>
#include <math.h>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/imgproc/types_c.h>
#include <opencv2/highgui/highgui_c.h>
#include <opencv2/photo/photo.hpp>
#include <android/log.h>
extern "C" {
#include "virtual.h"
}
#define LOG_TAG "VLC - Imagen 3D - JNI"
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)
using namespace cv;
using namespace std;
extern "C" int camino(void){... }
此程序調用OpenCV的功能。
virtual.h(家庭/弗吉尼亞州/安卓/ VLC/src目錄/輸入/ virtual.h)
/*
* virtual.h
*/
#ifndef __VIRTUAL_H
#define __VIRTUAL_H
int camino(void);
#endif /*__VIRTUAL_H*/
但問題是,我需要調用 「卡米諾」 功能從decoder.c( (家庭/弗吉尼亞州/安卓/ VLC/src目錄/輸入/ decoder.c):
#include "virtual.h"
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <assert.h>
...
static void DecoderPlayVideo(decoder_t *p_dec, picture_t *p_picture,
int *pi_played_sum, int *pi_lost_sum){
...
int res = camino();
msg_Warn(p_dec, "Llamada a virtualJNI devuelve %d", &res);
vout_PutPicture(p_vout, p_picture);
...
}
...
,我發現了一個錯誤:
/home/virginia/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ../vlc/android/src/.libs/libvlccore.a(decoder.o): in function DecoderDecodeVideo:../../src/input/decoder.c:1501: error: undefined reference to 'camino'
collect2: ld returned 1 exit status
make[1]: *** [obj/local/armeabi-v7a/libvlcjni.so] Error 1
make[1]: Leaving directory `/home/virginia/android/vlc-android'
make: *** [vlc-android/obj/local/armeabi-v7a/libvlcjni.so] Error 2
我在做什麼WRO NG?非常感謝
爲什麼在定義中有'extern「C」'? –
您應該首先決定是否使用C或C++進行編程。然後按照該語言的約定。例如,在C++中,你不寫'int camino(void);',而是'int camino();'。我甚至不知道前者是否有效 - 你只是不會寫這個。 –
把void放在那裏沒有錯。在C++中它不被認爲是很好的風格,我不這樣做,但它沒有錯。 –