2015-08-17 79 views
-1

我想在x64 Windows 7臺式計算機上使用Visual Studios 2013,OpenCV 2.4.9和Qt 5.4運行一些代碼。當我將解決方案平臺設置爲Win32時,代碼運行良好。然而,爲了讓我繼續這個項目,我需要接下來實現微軟的Magnification API,它已經在我的計算機的本機操作系統類型上運行,因爲它有一些問題沒有得到解決。但是,當我配置的所有設置在x64上運行,我得到以下錯誤:LNK2019錯誤:在x64機器上使用x86庫

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 &)" ([email protected]@@[email protected]@[email protected][email protected]@[email protected]@@Z) referenced in function "private: void __cdecl MainWindow::detect(class cv::VideoCapture,bool)" ([email protected]@@[email protected]@@[email protected]) 
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 &)" ([email protected]@[email protected]@[email protected]@[email protected]@@[email protected]@Z) referenced in function "private: void __cdecl MainWindow::detect(class cv::VideoCapture,bool)" ([email protected]@@[email protected]@@[email protected]) 
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 &)" ([email protected]@[email protected]@[email protected]@[email protected]@@[email protected]@[email protected]@[email protected]) referenced in function "private: void __cdecl MainWindow::detect(class cv::VideoCapture,bool)" ([email protected]@@[email protected]@@[email protected]) 
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 &)" ([email protected]@[email protected]@[email protected]@[email protected]@@[email protected]@@Z) referenced in function "private: void __cdecl MainWindow::detect(class cv::VideoCapture,bool)" ([email protected]@@[email protected]@@[email protected]) 
1>mainwindow.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl INTRAFACE::FaceAlignment::~FaceAlignment(void)" ([email protected]@@[email protected]) referenced in function "private: void __cdecl MainWindow::detect(class cv::VideoCapture,bool)" ([email protected]@@[email protected]@@[email protected]) 
1>Q:\eyegaze\x64\Release\\EyeGazeDemo.exe : fatal error LNK1120: 5 unresolved externals 

INTRAFACE :: FaceAlignment來自一個Intraface庫(即86)這是什麼導致了問題?如果是這樣,我該如何解決這個問題?

謝謝!

+3

是的,如果您想將其作爲x64代碼運行,則需要x64版本的庫。 –

+0

@BoPersson有沒有一種方法可以自己解決這個問題? (我不認爲有一個x64版本可供下載) –

+3

除非你有所有的源代碼,並且可以自己構建x64版本。 –

回答

0

我對OpenCV並不熟悉,但this page在他們的網站上建議您應該爲每種平臺類型分開bin和lib文件夾。按照慣例,lib文件夾是鏈接器用來滿足未解決符號的庫的地方。

您需要做的第一件事是確定您是否擁有OpenCV必需的x64 BIN和LIB文件夾。假設你有x64文件夾,下一步是找出爲什麼你的x86構建鏈接成功,而你的x64構建不成功。

這只是一個猜測,但創建新平臺目標時的一個常見錯誤是忘記調整條目以說明OpenCV等第三方軟件包。例如,您可能調整了庫目錄條目VC++目錄(在C++項目屬性中),以便在第一次創建項目時包含x86 LIB文件夾,但忘記在x64版本中創建對應的x64 LIB文件夾條目的項目屬性。

其他C++項目屬性,以檢查包括在鏈接>輸入鏈接>一般附加依賴​​附加庫目錄

在每種情況下,您都需要確保如果在x86配置中設置了該屬性,則x64配置中會有適當的對應設置。

這有點費力,但是打開Project Properties對話框並在x86和x64之間切換Platform下拉菜單,您應該能夠看到設置的差異。 IIRC,您還可以將平臺下拉菜單設置爲「所有平臺」,屬性頁將標記在不同平臺上具有不同值的屬性。請記住,雖然有些屬性是假設爲不同的平臺有不同的值。