我正在尝试在一个大型项目(BCI2000)的扩展中使用部分 OpenCV 套件。虽然我已经成功编译并执行了 OpenCV 测试程序,但在主程序中链接 OpenCV 函数时,链接失败并显示 LNK2019: unresolved external symbol。在最顶部的属性页面中,在项目属性管理器中,显示以下命令行:
/OUT:"D:\Users\Admin\Documents\Visual Studio 2012\Projects\bci2k\build\CMakeFiles\custom\OpenCVTestSPModule\Release\OpenCVTestSPModule.exe" /MANIFEST /NXCOMPAT /PDB:"D:\Users\Admin\ Documents\Visual Studio 2012\Projects\bci2k\build\CMakeFiles\custom\OpenCVTestSPModule\Release\OpenCVTestSPModule.pdb" /DYNAMICBASE "opencv_calib3d2410.lib" "opencv_contrib2410.lib" "opencv_core2410.lib" "opencv_features2d2410.lib" "opencv_flann2410.lib ” “opencv_gpu2410.lib” “opencv_highgui2410.lib” “opencv_imgproc2410.lib” “opencv_legacy2410.lib” “opencv_ml2410.lib” “opencv_nonfree2410.lib” “opencv_objdetect2410.lib” “opencv_ocl2410.lib” “opencv_photo2410.lib” “opencv1_stitching24 " "opencv_superres2410.lib" "opencv_ts2410.lib" "opencv_video2410.lib" "opencv_videostab2410.lib" /MACHINE:X86 /SAFESEH /PGD:"D:\Users\Admin\Documents\Visual Studio 2012\Projects\bci2k\build\CMakeFiles\ custom\OpenCVTestSPModule\Release\OpenCVTestSPModule.pgd" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"OpenCVTestSPModule.dir\Release\OpenCVTestSPModule.exe.intermediate.manifest" /ERRORREPORT:PROMPT /LIBPATH: "D:\lib\opencv\build\x86\vc11\lib" /TLBID:1/MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"OpenCVTestSPModule.dir\Release\OpenCVTestSPModule.exe.intermediate.manifest" /ERRORREPORT:PROMPT /LIBPATH:"D:\lib\opencv\build\ x86\vc11\lib" /TLBID:1/MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"OpenCVTestSPModule.dir\Release\OpenCVTestSPModule.exe.intermediate.manifest" /ERRORREPORT:PROMPT /LIBPATH:"D:\lib\opencv\build\ x86\vc11\lib" /TLBID:1
同时,在 Build Output 框中,执行的链接命令确认已经包含了额外的 OpenCV LIBPATH:s,但是所有的 OpenCV .lib-files 都丢失了,自然会导致这个错误。
"/OUT:D:\Users\Admin\Documents\Visual Studio 2012\Projects\bci2k\build\CMakeFiles\custom\OpenCVTestSPModule\Release\OpenCVTestSPModule.exe" /INCREMENTAL:NO /LIBPATH:D:\lib\opencv\build \x86\vc11\lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib ws2_32.lib ....\frameworks\LibTiny\Release\ LibTiny.lib ....\frameworks\CoreLib\Release\BCI2000FrameworkCore.lib ws2_32.lib ....\frameworks\SigProcModuleLib\Release\BCI2000FrameworkSigProcModule.lib ....\frameworks\CoreLib\Release\BCI2000FrameworkCore.lib .. ..\frameworks\LibTiny\Release\LibTiny.lib ws2_32.lib winmm.lib /NODEFAULTLIB:msvcrt /NODEFAULTLIB:msvcrtd /NODEFAULTLIB:msvcprt /NODEFAULTLIB:msvcprtd /MANIFEST "/MANIFESTUAC:level='asInvoker' uiAccess='false' " /manifest:embed "/PDB:D:/Users/Admin/Documents/Visual Studio 2012/Projects/bci2k/build/CMakeFiles/custom/OpenCVTestSPModule/Release/OpenCVTestSPModule.pdb" /SUBSYSTEM:WINDOWS /TLBID:1 /DYNAMICBASE /NXCOMPAT "/IMPLIB:D:/Users/ Admin/Documents/Visual Studio 2012/Projects/bci2k/build/CMakeFiles/custom/OpenCVTestSPModule/Release/OpenCVTestSPModule.lib" /MACHINE:X86 /SAFESEH /machine:X86 /include:_SigProcRegistry OpenCVTestSPModule.dir\Release\PipeDefinition.obj目录\发布\PipeDefinition.obj目录\发布\PipeDefinition.obj
“Additional Include Directories”和“Additional Dependencies”在同一个Property Sheet中,所以很明显这个property sheet是在编译时读取的。有谁知道可能导致此问题的原因?目标是Win32(Release),IDE是VS2012。
可能相关:在属性管理器中,存在一个名为“Microsoft.Cpp.Win32.user”的属性表。如果尝试将其向上移动(稍后在评估中),则会出现错误(“在文件中带有标签“PropertySheets”和(条件)的导入组(路径项目)”)显示。
可以在测试程序中重新排列属性表的优先级而不会出现问题。