LNK2019错误:在x64计算机上使用x86库

时间:2015-08-17 16:46:53

标签: c++ windows qt opencv visual-studio-2013

我正在尝试使用Visual Studio 2013,OpenCV 2.4.9和Qt 5.4在x64 Windows 7台式计算机上运行一些代码。当我将解决方案平台设置为Win32时,代码运行正常。但是,为了让我继续这个项目,我需要接下来实现Microsoft的Magnification API,它已经在我的计算机的本机操作系统类型上运行,因为他们还没有解决一些错误。但是,当我将所有设置配置为在x64上运行时,我收到以下错误:

1>mainwindow.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl INTRAFACE::FaceAlignment::FaceAlignment(char const *,char const *,class INTRAFACE::XXDescriptor const *,class cv::Rect_<double> const &)" (__imp_??0FaceAlignment@INTRAFACE@@QEAA@PEBD0PEBVXXDescriptor@1@AEBV?$Rect_@N@cv@@@Z) referenced in function "private: void __cdecl MainWindow::detect(class cv::VideoCapture,bool)" (?detect@MainWindow@@AEAAXVVideoCapture@cv@@_N@Z)
1>mainwindow.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: enum INTRAFACE::IFRESULT __cdecl INTRAFACE::FaceAlignment::Track(class cv::Mat const &,class cv::Mat const &,class cv::Mat &,float &)" (__imp_?Track@FaceAlignment@INTRAFACE@@QEAA?AW4IFRESULT@2@AEBVMat@cv@@0AEAV45@AEAM@Z) referenced in function "private: void __cdecl MainWindow::detect(class cv::VideoCapture,bool)" (?detect@MainWindow@@AEAAXVVideoCapture@cv@@_N@Z)
1>mainwindow.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: enum INTRAFACE::IFRESULT __cdecl INTRAFACE::FaceAlignment::Detect(class cv::Mat const &,class cv::Rect_<int> const &,class cv::Mat &,float &)" (__imp_?Detect@FaceAlignment@INTRAFACE@@QEAA?AW4IFRESULT@2@AEBVMat@cv@@AEBV?$Rect_@H@5@AEAV45@AEAM@Z) referenced in function "private: void __cdecl MainWindow::detect(class cv::VideoCapture,bool)" (?detect@MainWindow@@AEAAXVVideoCapture@cv@@_N@Z)
1>mainwindow.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: enum INTRAFACE::IFRESULT __cdecl INTRAFACE::FaceAlignment::EstimateHeadPose(class cv::Mat const &,struct INTRAFACE::HeadPose &)" (__imp_?EstimateHeadPose@FaceAlignment@INTRAFACE@@QEAA?AW4IFRESULT@2@AEBVMat@cv@@AEAUHeadPose@2@@Z) referenced in function "private: void __cdecl MainWindow::detect(class cv::VideoCapture,bool)" (?detect@MainWindow@@AEAAXVVideoCapture@cv@@_N@Z)
1>mainwindow.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl INTRAFACE::FaceAlignment::~FaceAlignment(void)" (__imp_??1FaceAlignment@INTRAFACE@@QEAA@XZ) referenced in function "private: void __cdecl MainWindow::detect(class cv::VideoCapture,bool)" (?detect@MainWindow@@AEAAXVVideoCapture@cv@@_N@Z)
1>Q:\eyegaze\x64\Release\\EyeGazeDemo.exe : fatal error LNK1120: 5 unresolved externals

INTRAFACE :: FaceAlignment来自一个内部库(x86)这是什么导致了这个问题?如果是这样,我该如何解决这个问题呢?

谢谢!

1 个答案:

答案 0 :(得分:0)

我不熟悉OpenCV,但是他们网站上的this page表明你应该为每种平台类型都有单独的bin和lib文件夹。按照惯例,lib文件夹是链接器用来满足未解析符号的库。

您需要做的第一件事是弄清楚您是否拥有OpenCV所需的x64 BIN和LIB文件夹。假设您拥有x64文件夹,下一步就是找出x86构建链接成功的原因,而x64版本没有。

这只是猜测,但创建新平台目标时的一个常见障碍是忘记调整条目以考虑OpenCV等第三方软件包。例如,您可能已调整 VC ++目录下的库目录条目(在C ++项目属性中),以便在您第一次创建项目时包含x86 LIB文件夹但忘记制作x64版本的项目属性中相应的x64 LIB文件夹条目。

要检查的其他C ++项目属性包括链接器&gt;下的其他库目录 链接器&gt;下的常规其他依赖关系输入

在每种情况下,您都需要确保如果在x86配置中设置了属性,则x64配置中有相应的相应设置。

这有点费力但是,通过打开“项目属性”对话框并在x86和x64之间切换平台下拉列表,您应该能够看到设置的差异。 IIRC您还可以将Platform下拉菜单设置为“All Platforms”,属性页面将标记在不同平台上具有不同值的属性。请记住,某些属性假设为不同平台提供不同的值。