错误:找不到xxx.hpp,找不到xxx.lib,“模块计算机类型“x86”与目标计算机类型“x64”冲突”,“模块计算机类型“x64”与目标计算机类型“x86”冲突,Could NOT find 包名(missing: 库名_LIBRARY)等等类似错误
建议使用NuGet或vcpkg安装对应的第三方库。在Visual Studio 中 解决方案->[项目名称]->(右键)->引用->管理NuGet软件包->搜索并安装对应的第三方库。如果要对整个解决方案安装 工具->NuGet包管理器->管理解决方案的NuGet程序包,则可以搜索安装对应版本的第三方库。安装后还要在需要的项目上右键->生成依赖项->生成自定义,勾选对应的第三方库。
具体使用方法参考微软官方文档:NuGet 包管理器用户界面参考
=====================================
有时我们会希望解决方案里的一个项目与其他项目共享NugetPackages以保证它们使用相同版本的第三方库且节约硬盘空间:
在vcxproj和sln文件所在文件夹添加名为packages.config和nuget.config的文件,保证每个项目的packages.config文件内容相同,且nuget.config文件指向的NugetPackages文件夹目录相同(可以使用相对目录)。重启解决方案,在解决方案的对应项目上单击右键->管理Nuget程序包,如果在其中发现了已经安装的第三方库则说明配置成功。
=====================================
错误:“LNK1107 文件无效或损坏: 无法在 0x3E8 处读取”
“属性->配置属性->链接器->输入->附加依赖项” 应配置使用到的静态库文件名,如”opencv_world346d.lib”,而不是动态库”opencv_world346d.dll”
=====================================
错误:找不到xxx.dll
把动态库文件 “opencv_world346d.dll”放在解决方案根目录或编译输出目录下
=====================================
链接时出现错误:LNK2019 无法解析的外部符号 “__declspec(dllimport) bool __cdecl caffe::GPUAvailable(void)” (__imp_?GPUAvailable@caffe@@YA_NXZ),该符号在函数 main 中被引用 main main.obj
在“属性->配置属性->链接器->输入->附加依赖项“中设置必需的静态库.lib文件,注意:如果在Release中设置了文件名中带d的静态库文件(debug静态库),即静态库类型与配置不匹配,即使设置了静态库文件也会出现上述错误
=====================================
错误 LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug
项目属性->c/c++->代码生成->运行库 改为MTd,两个项目改成相同的
=====================================
错误 LNK1123 转换到 COFF 期间失败: 文件无效或损坏
解决方案\属性\配置属性\清单工具\输入和输出\嵌入清单:原来是“是”,改成“否”。
=====================================
错误 D8016 “/ZI”和“/Gy-”命令行选项不兼容
“C/C++” ->“常规”->“调试信息格式”->选择“程序数据库(/Zi)”或“无”,这也会导致Debug无法进入断点
=====================================
未经处理的异常(在 XXX 中): 0xC00000FD: Stack overflow
项目属性->链接器->系统->堆栈保留大小 可以设到160000000
=====================================
C2220: 警告被视为错误 – 没有生成“object”文件
此错误后跟着的警告为导致错误的警告
=====================================
Release的解决方案配置属性和Debug不同,要看清工具栏是Release还是Debug再设置解决方案配置属性。如果一个项目为lib,Release设置为exe,Debug设置为lib,工具栏里忘记改成Debug,则会导致”无法解析的外部符号_main”的错误
=====================================
在windows中使用如下命令生成Visual Studio解决方案文件(.sln)时
cmake .. -G "Visual Studio 15 2017 Win64"
有时会遇到没有设定某个包含目录的错误,如下:
CMake Error at D:/Program Files/CMake/share/cmake-3.14/Modules/FindBoost.cmake:2147 (message): Unable to find the requested Boost libraries. Unable to find the Boost header files. Please set BOOST_ROOT to the root directory containing Boost or BOOST_INCLUDEDIR to the directory containing Boost's headers. Call Stack (most recent call first): cmake/Dependencies.cmake:5 (find_package) CMakeLists.txt:43 (include) -- Could NOT find GFlags (missing: GFLAGS_INCLUDE_DIR GFLAGS_LIBRARY) -- Could NOT find Glog (missing: GLOG_INCLUDE_DIR GLOG_LIBRARY) CMake Error at D:/Program Files/CMake/share/cmake-3.14/Modules/FindPackageHandleStandardArgs.cmake:137 (message): Could NOT find Protobuf (missing: Protobuf_LIBRARIES Protobuf_INCLUDE_DIR) Call Stack (most recent call first): D:/Program Files/CMake/share/cmake-3.14/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE) D:/Program Files/CMake/share/cmake-3.14/Modules/FindProtobuf.cmake:594 (FIND_PACKAGE_HANDLE_STANDARD_ARGS) cmake/ProtoBuf.cmake:4 (find_package) cmake/Dependencies.cmake:24 (include) CMakeLists.txt:43 (include) CMake Error: The following variables are used in this project, but they are set to NOTFOUND. Please set them or make sure they are set and tested correctly in the CMake files: Boost_INCLUDE_DIR (ADVANCED) used as include directory in directory E:/ubuntu/helmet-detection/hardhat-wearing-detection/SSD-RPA used as include directory in directory E:/ubuntu/helmet-detection/hardhat-wearing-detection/SSD-RPA
查看..文件夹下的CMakeLists.txt发现其中有一些目录变量未设定
这时应该在上述命令前加上设定各个包含目录变量的参数,有如下方法:
cmake .. -G "Visual Studio 15 2017 Win64" -Boost_INCLUDE_DIR=XXX\XXX
如果依然出现问题,那就在错误信息提示的代码前加上
set(BOOST_ROOT "XXX/XXX")
=====================================
error LNK2038: 检测到“_MSC_VER”的不匹配项问题
将所有项目的平台工具集都设置成相同的版本,如都设成v120,清理解决方案并重新生成可以解决此问题
=====================================
Check failed: registry.count(type) == 1 (0 vs. 1) Unknown layer type:
MaskPooling (known types: AbsVal, ArgMax, BN, BNLL, BatchNorm, Bias, Concat, Convolution, ConvolutionDepthwise,
Crop, Deconvolution, DetectionOutput, Dropout, ELU, Eltwise, Embed, Exp, Filter, Flatten, InnerProduct, Input,
LRN, Log, MVN, Normalize, PReLU, PSROIPooling, Parameter, Permute, Pooling, Power, PriorBox, Proposal, ROIPooling, ReLU,
Reduction, Reshape, SPP, Scale, ShuffleChannel, Sigmoid, Slice, Softmax, Split, TanH, Threshold, Tile)
用编辑器打开caffe.vcxproj,添加
<ClInclude Include="E:\ubuntu\mini-caffe\src\layers\mask_pooling_layer.hpp" />
<CudaCompile Include="E:\ubuntu\mini-caffe\src\layers\mask_pooling_layer.cu" />
<ClCompile Include="E:\ubuntu\mini-caffe\src\layers\mask_pooling_layer.cpp" />
=====================================
LNK2019 无法解析的外部符号 “__declspec(dllimport) public: void __cdecl caffe::Net::Forward(bool)” (__imp_?Forward@Net@caffe@@QEAAX_N@Z),该符号在函数 main 中被引用
这类错误可能是由于上文所述的未设定库导致的,也有可能是由于使用的库与编译器版本不一致导致的,各版本编译器如下表
Visual Studio版本 编译器版本 平台工具集版本
Visual Studio 6 : vc6 V60
Visual Studio 2003 : vc7 V71
Visual Studio 2005 : vc8 V80
Visual Studio 2008 : vc9 V90
Visual Studio 2010 : vc10 V100
Visual Studio 2012 : vc11 V110
Visual Studio 2013 : vc12 V120
Visual Studio 2015 : vc14 V140
Visual Studio 2017 : vc15 V141