我是C ++的新手,我正在尝试在Windows环境中使用Geany做一些OpenCV教程(计划在RPi上进行开发,因此在Windows中使用Geany来保持一致)。这似乎是许多人奋斗的第一个问题是对编译/建立/链接过程的理解,以及我现在所处的位置。
我试图使用OpenCV库编译我的第一个源文件,我发现我必须在编译和构建命令中添加以下行,以便链接器可以找到库:
编译:g ++ -Wall -c"%f" -IC:\的OpenCV \建立\包括
构建:g ++ -Wall -o"%e" "%F" -IC:\的OpenCV \建立\包括
现在,它编译得很好但是在构建它时有很多错误:
g ++ -Wall -o" opencv_version" " opencv_version.cpp" -IC:\ opencv \ build \ include(在目录中:C:\ opencv \ build \ include \ opencv2 \ core) C:\ Users \ nag1 \ AppData \ Local \ Temp \ cc1m9rcz.o:opencv_version.cpp :(。text + 0x69):对
cv::CommandLineParser::CommandLineParser(int, char const* const*, cv::String const&)' C:\Users\nag1\AppData\Local\Temp\cc1m9rcz.o:opencv_version.cpp:(.text+0x9a): undefined reference to
的未定义引用cv :: CommandLineParser :: has(cv :: String const& )const' C:\ Users \ nag1 \ AppData \ Local \ Temp \ cc1m9rcz.o:opencv_version.cpp :(。text + 0xb7):未定义引用cv::CommandLineParser::printMessage() const' C:\Users\nag1\AppData\Local\Temp\cc1m9rcz.o:opencv_version.cpp:(.text+0xc6): undefined reference to
cv :: CommandLineParser :: check()const' C:\ Users \ nag1 \ AppData \ Local \ Temp \ cc1m9rcz.o:opencv_version.cpp :(。text + 0xd7):未定义引用cv::CommandLineParser::printErrors() const' C:\Users\nag1\AppData\Local\Temp\cc1m9rcz.o:opencv_version.cpp:(.text+0x100): undefined reference to
cv :: CommandLineParser :: has(cv :: String const& )const' C:\ Users \ nag1 \ AppData \ Local \ Temp \ cc1m9rcz.o:opencv_version.cpp :(。text + 0x118):未定义引用cv::getBuildInformation()' C:\Users\nag1\AppData\Local\Temp\cc1m9rcz.o:opencv_version.cpp:(.text+0x17f): undefined reference to
cv :: CommandLineParser :: ~CommandLineParser()' C:\ Users \ nag1 \ AppData \ Local \ Temp \ cc1m9rcz.o:opencv_version.cpp :(。text + 0x1a5):未定义引用cv::CommandLineParser::~CommandLineParser()' C:\Users\nag1\AppData\Local\Temp\cc1m9rcz.o:opencv_version.cpp:(.text+0x1d7): undefined reference to
cv :: CommandLineParser :: ~CommandLineParser()' C:\ Users \ nag1 \ AppData \ Local \ Temp \ cc1m9rcz.o:opencv_version.cpp :(。text $ _ZN2cv6StringC1EPKc [__ ZN2cv6StringC1EPKc] + 0x3e):对cv::String::allocate(unsigned int)' C:\Users\nag1\AppData\Local\Temp\cc1m9rcz.o:opencv_version.cpp:(.text$_ZN2cv6StringD1Ev[__ZN2cv6StringD1Ev]+0xf): undefined reference to
的未定义引用cv :: String :: deallocate() ' collect2.exe:错误:ld返回1退出状态 编译失败。
另外我的(教程' s)代码: '
#include <opencv2/core/utility.hpp>
#include <iostream>
const char* keys =
{
"{ b build | | print complete build info }"
"{ h help | | print this help }"
};
int main(int argc, const char* argv[])
{
cv::CommandLineParser parser(argc, argv, keys);
if (parser.has("help"))
{
parser.printMessage();
}
else if (!parser.check())
{
parser.printErrors();
}
else if (parser.has("build"))
{
std::cout << cv::getBuildInformation() << std::endl;
}
else
{
std::cout << "Welcome to OpenCV " << CV_VERSION << std::endl;
}
return 0;
}
`
我读过的其他帖子说g ++命令之后的标志序列会使这个问题变得典型,并且-I路径必须在输出标志之后,但我的已经在那个序列中了
所以我真的有两个问题:
1)为什么要赢得它?
2)我和#34; -I&#34;和&#34; -L&#34;在编译/构建命令中,以及将include语句放在&#34;&#34;和&lt;&gt;,并且具有不同组合的不同成功模式。我还尝试删除/ opencv2 / core /目录,然后它永远找不到utility.hpp的依赖项,(说不能找到/opencv2/core.cpp,当然因为现在它&#39;只查看/ opencv2 / core /文件夹)。我可以获得一些关于区分不同包含方法和链接器如何跟踪目录的指导吗?还有什么是OpenCV的最佳实践?
3)我怎样才能(如果可能的话)使编译器知道非标准库目录而不更改编译和构建命令?我可以把'包括&#39; windows下PATH环境变量下的目录?