OpenCV未定义引用我自己在库中的方法

Posted

技术标签:

【中文标题】OpenCV未定义引用我自己在库中的方法【英文标题】:OpenCV undefined reference to my own method in library 【发布时间】:2015-01-25 12:12:28 【问题描述】:

我用 C++ OpenCV 写了一个软件,它是如此结构化:

main.cpp testfps.cpp testfps.hpp

问题是我得到了这两个错误

对“myTestfps1(int, int)”的未定义引用 未定义对“myTestfps2(int, int)”的引用

这两个方法写在testfps.cpp中,声明在testfps.hpp中。

ma​​in.cpp中声明了所有必要的#include <name>,在它们之后是#include "testfps.hpp"


ma​​in.cpp

    #include <stdio.h>
    #include <stdlib.h>
    #include <iostream>

    #include "testfps.hpp"

int main(int argc, char** argv[])
    ....
    switch(c)
    case 1: myTestfps1(a,b);break;
    case 2: myTestfps2(a,b);break;
    
...

testfps.cpp

#include <opencv2/opencv.hpp>
#include <time.h>
#include <stdio.h>

#include "testfps.hpp"

int myTestfps1(int a, int b)
...

int myTestfps2(int a, int b)
...

testfps.hpp

#ifndef TESTFPS_HPP
#define TESTFPS_HPP

int myTestfps1(int a, int b);
int myTestfps2(int a, int b);

#endif

这是怎么回事?

【问题讨论】:

你真的把 testfps.cpp 添加到你的项目中了吗? 我在 code::blocks 上创建了一个项目,我只是构建它,bt 我不知道编译是否忽略 testfps.cpp 我该如何检查? 【参考方案1】:

正如 Samuel 指出的那样,您可能遇到的主要问题是您没有在编译中包含 testfps.cpp。

如果您使用 g++ 在 linux 上运行,请尝试以下操作:

g++ -o testfps main.cpp testfps.cpp

无论如何,由于您正在使用 C++,我建议您不要使用 C 头文件,例如 stdio.h 和 stdlib.h。而是使用 cstdio 和 cstdlib:

#include <cstdlib>
#include <cstdio>

最后,你对main的定义错了,argv不是指针3

int main(int argc, char* argv[])

或:

int main(int argc, char** argv)

【讨论】:

好的,很好!但现在我收到错误“未定义对 openCV 方法的引用”。我应该在 g++ -o testfps main.cpp testfps.cpp 之后在 CLI 中链接库吗? 谢谢我也用这个答案解决了***.com/questions/5971206/…

以上是关于OpenCV未定义引用我自己在库中的方法的主要内容,如果未能解决你的问题,请参考以下文章

链接错误:Armadillo 库中的“未定义对‘pthread_atfork’的引用”

未定义的符号引用,但库已链接

如何检测二进制/库中的未定义符号?

我自己的库给了我“对 <function_name> 的未定义引用

Android OpenCV 未定义对本机类的引用

强制 GCC 通知共享库中未定义的引用