交叉编译openCV应用程序

嗨,大家好,我正在做一个ARM应用程序的C + +。 我有一个应用程序的原型,我编译交叉编译,它在ARM中工作非常好。 我做的是这样的:

首先,我得到了这样的.o文件

arm-linux-g++ -c PrototipoTRU.cpp 

然后我得到了这样的.exe(我的应用程序使用线程)

 arm-linux-g++ PrototipoTRU.o -o tru2 -pthread 

一切都很完美

我的问题是当我试图编译一个使用OpenCV的.cpp文件。 我试过了:

首先我试图得到.o:

  arm-linux-g++ -c camera.cpp 

这不行,我得到这个输出:

 IPCamera.cpp:5:30: error: opencv2/opencv.hpp: No such file or directory IPCamera.cpp:6:39: error: opencv2/highgui/highgui.hpp: No such file or directory IPCamera.cpp:7:39: error: opencv2/imgproc/imgproc.hpp: No such file or directory IPCamera.cpp:11:22: error: X11/Xlib.h: No such file or directory IPCamera.cpp:16: error: 'cv' is not a namespace-name IPCamera.cpp:16: error: expected namespace-name before ';' token IPCamera.cpp: In function 'int main(int, char**)': IPCamera.cpp:46: error: 'cv' has not been declared IPCamera.cpp:46: error: expected ';' before 'cap' IPCamera.cpp:52: error: 'Display' was not declared in this scope IPCamera.cpp:52: error: 'disp' was not declared in this scope IPCamera.cpp:52: error: 'XOpenDisplay' was not declared in this scope IPCamera.cpp:53: error: 'Screen' was not declared in this scope IPCamera.cpp:53: error: 'scrn' was not declared in this scope IPCamera.cpp:53: error: 'DefaultScreenOfDisplay' was not declared in this scope IPCamera.cpp:63: error: 'cv' has not been declared IPCamera.cpp:63: error: expected ';' before 'frame' IPCamera.cpp:66: error: 'cv' has not been declared IPCamera.cpp:66: error: 'CV_WINDOW_NORMAL' was not declared in this scope IPCamera.cpp:68: error: 'cvMoveWindow' was not declared in this scope IPCamera.cpp:73: error: 'CV_WND_PROP_FULLSCREEN' was not declared in this scope IPCamera.cpp:73: error: 'CV_WINDOW_FULLSCREEN' was not declared in this scope IPCamera.cpp:73: error: 'cvSetWindowProperty' was not declared in this scope IPCamera.cpp:79: error: 'cap' was not declared in this scope IPCamera.cpp:82: error: 'frame' was not declared in this scope IPCamera.cpp:89: error: 'cv' has not been declared IPCamera.cpp:92: error: 'cv' has not been declared 

所以这似乎有一些问题的链接,但是如果这样做:

  g++ -c IPCamera.cpp 

我得到了.o文件,但显然,当我得到的.exe它不能在ARM中工作。 我不明白的是,为什么如果我编译一个没有opencv的应用程序,就像第一个例子那样,arm-linux-g ++工作的非常麻烦,当我尝试编译openCV应用程序时,

我试图编译也是这样的:

  arm-linux-g++ -c IPCamera.cpp `pkg-config opencv --libs --cflags` 

但结果是一样的,但是如果我这样做:

  g++ -c IPCamera.cpp `pkg-config opencv --libs --cflags` 

有用。 所以我想这是一个path问题,但我不知道如何解决它。

有人可以帮助我?

感谢你们

嗨dennisfen这是mi文件的内容:

  set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_VERSION 1) set(CMAKE_SYSTEM_PROCESSOR arm) set(GCC_COMPILER_VERSION "4.6" CACHE STRING "GCC Compiler version") set(FLOAT_ABI_SUFFIX "") if (NOT SOFTFP) set(FLOAT_ABI_SUFFIX "hf") endif() set(CMAKE_C_COMPILER arm-linux- gnueabi${FLOAT_ABI_SUFFIX}-gcc-${GCC_COMPILER_VERSION}) set(CMAKE_CXX_COMPILER arm-linux- gnueabi${FLOAT_ABI_SUFFIX}-g++-${GCC_COMPILER_VERSION}) set(ARM_LINUX_SYSROOT /usr/arm-linux-gnueabi${FLOAT_ABI_SUFFIX} CACHE PATH "ARM cross compilation system root") set(CMAKE_CXX_FLAGS "" CACHE STRING "c++ flags") set(CMAKE_C_FLAGS "" CACHE STRING "c flags") set(CMAKE_SHARED_LINKER_FLAGS "" CACHE STRING "shared linker flags") set(CMAKE_MODULE_LINKER_FLAGS "" CACHE STRING "module linker flags") set(CMAKE_EXE_LINKER_FLAGS "-Wl,-z,nocopyreloc" CACHE STRING "executable linker flags") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mthumb -fdata-sections -Wa,--noexecstack -fsigned-char -Wno-psabi") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mthumb -fdata-sections -Wa,--noexecstack -fsigned-char -Wno-psabi") set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,--gc- sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now ${CMAKE_SHARED_LINKER_FLAGS}") set(CMAKE_MODULE_LINKER_FLAGS "-Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,--gc- sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now ${CMAKE_MODULE_LINKER_FLAGS}") set(CMAKE_EXE_LINKER_FLAGS "-Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,--gc- sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now ${CMAKE_EXE_LINKER_FLAGS}") 

Solutions Collecting From Web of "交叉编译openCV应用程序"

看来你需要设置包含路径到你的跨OpenCV安装:

 arm-linux-g++ -I/path/to/opencv/include IPCamera.cpp -o tru2 

当你打电话给pkg-config时,它会报告主机系统的设置,而不是你的手臂交叉工具链。

正如@dennisfen建议您可能需要设置包含路径以及您正在使用的库的交叉OpenCV的库路径,如下所示:

 arm-linux-g++ -I/path/to/opencv/include -L/path/to/library IPCamera.cpp -o tru2 -lopencv_core -pthread