Visual Studio 2013 - openCV 3.0 库的 C++ 链接器错误
Visual Studios 2013 - C++ Linker Error with openCV 3.0 Libs
我的 Visual Studios 2013 上的 C++ 链接器存在问题 Windows8。我想在我的 Visual Studios 中使用 openCV 3.0。代码中的所有链接都将正常使用,并且 IntelliSense 会识别数据成员。但是如果我想编译程序,Visual Studios 会给我以下错误:
Fehler 1 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""private: char * __thiscall cv::String::allocate(unsigned int)" (?allocate@String@cv@@AAEPADI@Z)" in Funktion ""public: __thiscall cv::String::String(char const *)" (??0String@cv@@QAE@PBD@Z)". C:\Users\Marc\Documents\Workspaces\C++_VS\OpenCV_Test\OpenCV_Test\main.obj OpenCV_Test
Fehler 2 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""private: void __thiscall cv::String::deallocate(void)" (?deallocate@String@cv@@AAEXXZ)" in Funktion ""public: __thiscall cv::String::~String(void)" (??1String@cv@@QAE@XZ)". C:\Users\Marc\Documents\Workspaces\C++_VS\OpenCV_Test\OpenCV_Test\main.obj OpenCV_Test
Fehler 3 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall cv::CommandLineParser::CommandLineParser(int,char const * const * const,class cv::String const &)" (??0CommandLineParser@cv@@QAE@HQBQBDABVString@1@@Z)" in Funktion "_main". C:\Users\Marc\Documents\Workspaces\C++_VS\OpenCV_Test\OpenCV_Test\main.obj OpenCV_Test
Fehler 4 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall cv::CommandLineParser::~CommandLineParser(void)" (??1CommandLineParser@cv@@QAE@XZ)" in Funktion "_main". C:\Users\Marc\Documents\Workspaces\C++_VS\OpenCV_Test\OpenCV_Test\main.obj OpenCV_Test
Fehler 5 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""protected: void __thiscall cv::CommandLineParser::getByName(class cv::String const &,bool,int,void *)const " (?getByName@CommandLineParser@cv@@IBEXABVString@2@_NHPAX@Z)" in Funktion ""public: class cv::String __thiscall cv::CommandLineParser::get(class cv::String const &,bool)const " (??$get@VString@cv@@@CommandLineParser@cv@@QBE?AVString@1@ABV21@_N@Z)". C:\Users\Marc\Documents\Workspaces\C++_VS\OpenCV_Test\OpenCV_Test\main.obj OpenCV_Test
Fehler 6 error LNK1120: 5 nicht aufgelöste Externe C:\Users\Marc\Documents\Workspaces\C++_VS\OpenCV_Test\Debug\OpenCV_Test.exe 1 1 OpenCV_Test
我按照以下指南安装了 openCV:http://www.minlabz.com/how-to-install-opencv-3-0-0-on-windows-7-and-configure-with-visual-studio-2014/
这是我用来测试 openCV 依赖项是否有效的小代码:
#include "opencv2\highgui\highgui.hpp"
#include "opencv2\core\core.hpp"
#include <stdio.h>
using namespace cv;
int main(int argc, const char** argv)
{
const char* keyMap;
//Standard image that will be used if dont exist arguments
keyMap = "{path | | }";
//Reading the Callingarguments
CommandLineParser parser(argc, argv, keyMap);
String filename = parser.get<String>("path");
}
我希望我没有忘记一些简单的事情。
当您使用 visual studio 2013 和 cmake 安装 OpenCV 3 时,您会在
中找到 dll
\opencv\msvc\bin\Release
用于释放模式和 \opencv\build\include
中的 include
,因此调用命令提示符并键入
cl /EHsc main.cpp /Fetest.exe /I D:\CPP_Libraries\opencv_3.0.0\build\include /link /LIBPATH:D:\CPP_Libraries\opencv_3.0.0\msvc\lib\Release opencv_core300.lib
使用此示例
#include <iostream>
#include <opencv2/core/core.hpp>
int main( int argc, char** argv )
{
std::cout << "\n%%( Random Generator )%%\n";
cv::Mat G = cv::Mat::ones(4,4, CV_64FC1);
cv::Mat m = cv::Mat::zeros(1,1, CV_64FC1);
cv::Mat s = cv::Mat::ones(1,1, CV_64FC1);
std::cout << G << std::endl;
cv::randn(G, m, s);
std::cout << G << std::endl;
return 0;
}
结果是
问题已解决
我重新解压了opencv,按照以下两个链接的步骤操作:
遇到与原始 post 中显示的非常相似的编译错误消息后,我点击了上面的完整链接(在 Windows 8 上安装 OpenCV 3.0,创建一个 Visual Studio( 2013) openCV 项目).
虽然这并没有解决编译错误。
对我有用的是更改 OPENCV_DIR 环境变量以指向 openCV 的 x86 版本而不是 x64 版本。
如果你在x64环境下编译过opencv,我强烈建议你在Configuration Manager中更改x64平台(Visual studio)。我解决了同样的问题。enter image description here
我的 Visual Studios 2013 上的 C++ 链接器存在问题 Windows8。我想在我的 Visual Studios 中使用 openCV 3.0。代码中的所有链接都将正常使用,并且 IntelliSense 会识别数据成员。但是如果我想编译程序,Visual Studios 会给我以下错误:
Fehler 1 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""private: char * __thiscall cv::String::allocate(unsigned int)" (?allocate@String@cv@@AAEPADI@Z)" in Funktion ""public: __thiscall cv::String::String(char const *)" (??0String@cv@@QAE@PBD@Z)". C:\Users\Marc\Documents\Workspaces\C++_VS\OpenCV_Test\OpenCV_Test\main.obj OpenCV_Test Fehler 2 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""private: void __thiscall cv::String::deallocate(void)" (?deallocate@String@cv@@AAEXXZ)" in Funktion ""public: __thiscall cv::String::~String(void)" (??1String@cv@@QAE@XZ)". C:\Users\Marc\Documents\Workspaces\C++_VS\OpenCV_Test\OpenCV_Test\main.obj OpenCV_Test Fehler 3 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall cv::CommandLineParser::CommandLineParser(int,char const * const * const,class cv::String const &)" (??0CommandLineParser@cv@@QAE@HQBQBDABVString@1@@Z)" in Funktion "_main". C:\Users\Marc\Documents\Workspaces\C++_VS\OpenCV_Test\OpenCV_Test\main.obj OpenCV_Test Fehler 4 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall cv::CommandLineParser::~CommandLineParser(void)" (??1CommandLineParser@cv@@QAE@XZ)" in Funktion "_main". C:\Users\Marc\Documents\Workspaces\C++_VS\OpenCV_Test\OpenCV_Test\main.obj OpenCV_Test Fehler 5 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""protected: void __thiscall cv::CommandLineParser::getByName(class cv::String const &,bool,int,void *)const " (?getByName@CommandLineParser@cv@@IBEXABVString@2@_NHPAX@Z)" in Funktion ""public: class cv::String __thiscall cv::CommandLineParser::get(class cv::String const &,bool)const " (??$get@VString@cv@@@CommandLineParser@cv@@QBE?AVString@1@ABV21@_N@Z)". C:\Users\Marc\Documents\Workspaces\C++_VS\OpenCV_Test\OpenCV_Test\main.obj OpenCV_Test Fehler 6 error LNK1120: 5 nicht aufgelöste Externe C:\Users\Marc\Documents\Workspaces\C++_VS\OpenCV_Test\Debug\OpenCV_Test.exe 1 1 OpenCV_Test
我按照以下指南安装了 openCV:http://www.minlabz.com/how-to-install-opencv-3-0-0-on-windows-7-and-configure-with-visual-studio-2014/
这是我用来测试 openCV 依赖项是否有效的小代码:
#include "opencv2\highgui\highgui.hpp"
#include "opencv2\core\core.hpp"
#include <stdio.h>
using namespace cv;
int main(int argc, const char** argv)
{
const char* keyMap;
//Standard image that will be used if dont exist arguments
keyMap = "{path | | }";
//Reading the Callingarguments
CommandLineParser parser(argc, argv, keyMap);
String filename = parser.get<String>("path");
}
我希望我没有忘记一些简单的事情。
当您使用 visual studio 2013 和 cmake 安装 OpenCV 3 时,您会在
中找到 dll\opencv\msvc\bin\Release
用于释放模式和 \opencv\build\include
中的 include
,因此调用命令提示符并键入
cl /EHsc main.cpp /Fetest.exe /I D:\CPP_Libraries\opencv_3.0.0\build\include /link /LIBPATH:D:\CPP_Libraries\opencv_3.0.0\msvc\lib\Release opencv_core300.lib
使用此示例
#include <iostream>
#include <opencv2/core/core.hpp>
int main( int argc, char** argv )
{
std::cout << "\n%%( Random Generator )%%\n";
cv::Mat G = cv::Mat::ones(4,4, CV_64FC1);
cv::Mat m = cv::Mat::zeros(1,1, CV_64FC1);
cv::Mat s = cv::Mat::ones(1,1, CV_64FC1);
std::cout << G << std::endl;
cv::randn(G, m, s);
std::cout << G << std::endl;
return 0;
}
结果是
问题已解决
我重新解压了opencv,按照以下两个链接的步骤操作:
遇到与原始 post 中显示的非常相似的编译错误消息后,我点击了上面的完整链接(在 Windows 8 上安装 OpenCV 3.0,创建一个 Visual Studio( 2013) openCV 项目).
虽然这并没有解决编译错误。
对我有用的是更改 OPENCV_DIR 环境变量以指向 openCV 的 x86 版本而不是 x64 版本。
如果你在x64环境下编译过opencv,我强烈建议你在Configuration Manager中更改x64平台(Visual studio)。我解决了同样的问题。enter image description here