c++ - OpenCV 无法在自定义目录中编译

标签 c++ opencv makefile

我在 Ubuntu 上,想在自定义目录上安装不同版本的 OpenCV(2.4.13)。我在这里遵循了本教程:http://code.litomisky.com/2014/03/09/how-to-have-multiple-versions-of-the-same-library-side-by-side/

我无法编译这个简单的 main.cpp 程序。我无法创建 cv::Mat 图像,但我可以获得 OpenCV 版本就好了!:

#include <iostream>
#include <opencv2/core/version.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

int main(int argc, char ** argv)
{
std::cout << "OpenCV version: "
        << CV_MAJOR_VERSION << "." 
        << CV_MINOR_VERSION << "."
        << CV_SUBMINOR_VERSION
        << std::endl;

cv::Mat image; //without this line, it works!


return 0;
}

这是我的生成文件:

CPP = g++ -std=c++0x

# OpenCV 2.4.13
CPPFLAGS = -L/home/myname/Desktop/myfolder/rewrite/opencv-2.4.13/release/installed/lib  \
           -I/home/myname/Desktop/myfolder/rewrite/opencv-2.4.13/release/installed/include


all: test

test: main.cpp
     $(CPP) $(CPPFLAGS) $^ -o $@

这是编译器错误:

/tmp/ccyrdd7H.o: In function `cv::Mat::~Mat()':
main.cpp:(.text._ZN2cv3MatD1Ev[cv::Mat::~Mat()]+0x39): undefined reference to `cv::fastFree(void*)'
/tmp/ccyrdd7H.o: In function `cv::Mat::release()':
main.cpp:(.text._ZN2cv3Mat7releaseEv[cv::Mat::release()]+0x47): undefined reference to `cv::Mat::deallocate()'
collect2: ld returned 1 exit status
make: *** [test] Error 1

最佳答案

您的 Makefile 是错误的。 -L-l 选项在链接时相关(但在编译时)。参见 this & that答案和示例(都与您的问题非常相似,并显示了您应该能够适应的 Makefile )。运行 make -p 以了解它们使用的内置规则和变量。

(我猜你在 Linux 上)

阅读更多关于 ELF 的信息, linkers & dynamic linkers , object files , executables等。参见 Levine 的 Linkers and loaders书。

顺便说一句,CV_MAJOR_VERSION 等...可能是 macro在某些 header 中定义(您的一些人提到 #include directives )。但是 cv::Mat 可能是一些真正的 C++ 类,带有构造函数或 vtable。这是在链接时引用的。

也许您还应该阅读一本关于 C++ 的好书,例如Programming -- Principles and Practice Using C++ ;但我们没有时间和空间在这里解释所有这些。

关于c++ - OpenCV 无法在自定义目录中编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40527019/

相关文章:

c++ - opencv 中轨迹栏名称的大小/长度

c# - 如何从 H.264 视频流中提取图像?

c++ - 从 PKCS11 读取 C++ 结构有什么问题?

C++ STL 错误的键类型

c++ - 使用指针替换 C 字符串中的字符

makefile - 理解 Makefile

unix - 是否应该在 Makefile 中使用局部变量的较长同义词?

c++ 右值引用和 const 限定符

python-3.x - OpenCV,如何将参数传递给 cv2.TrackerMedianFlow_create 函数?

makefile - Makefile中的Grep退出代码