当前位置:   article > 正文

x64 编译 静态链接_C++ 编译指南

-- could not find gflags (missing: gflags_include_dir gflags_library)

8fb8b396c976127deb49024efc5717e0.png

错误:找不到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"

有时会遇到没有设定某个包含目录的错误,如下:

  1. CMake Error at D:/Program Files/CMake/share/cmake-3.14/Modules/FindBoost.cmake:2147 (message):
  2. Unable to find the requested Boost libraries.
  3. Unable to find the Boost header files. Please set BOOST_ROOT to the root
  4. directory containing Boost or BOOST_INCLUDEDIR to the directory containing
  5. Boost's headers.
  6. Call Stack (most recent call first):
  7. cmake/Dependencies.cmake:5 (find_package)
  8. CMakeLists.txt:43 (include)
  9. -- Could NOT find GFlags (missing: GFLAGS_INCLUDE_DIR GFLAGS_LIBRARY)
  10. -- Could NOT find Glog (missing: GLOG_INCLUDE_DIR GLOG_LIBRARY)
  11. CMake Error at D:/Program Files/CMake/share/cmake-3.14/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
  12. Could NOT find Protobuf (missing: Protobuf_LIBRARIES Protobuf_INCLUDE_DIR)
  13. Call Stack (most recent call first):
  14. D:/Program Files/CMake/share/cmake-3.14/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
  15. D:/Program Files/CMake/share/cmake-3.14/Modules/FindProtobuf.cmake:594 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
  16. cmake/ProtoBuf.cmake:4 (find_package)
  17. cmake/Dependencies.cmake:24 (include)
  18. CMakeLists.txt:43 (include)
  19. CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
  20. Please set them or make sure they are set and tested correctly in the CMake files:
  21. Boost_INCLUDE_DIR (ADVANCED)
  22. used as include directory in directory E:/ubuntu/helmet-detection/hardhat-wearing-detection/SSD-RPA
  23. 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=XXXXXX

如果依然出现问题,那就在错误信息提示的代码前加上

set(BOOST_ROOT "XXX/XXX")

=====================================

error LNK2038: 检测到“_MSC_VER”的不匹配项问题

将所有项目的平台工具集都设置成相同的版本,如都设成v120,清理解决方案并重新生成可以解决此问题

=====================================

  1. Check failed: registry.count(type) == 1 (0 vs. 1) Unknown layer type:
  2. MaskPooling (known types: AbsVal, ArgMax, BN, BNLL, BatchNorm, Bias, Concat, Convolution, ConvolutionDepthwise,
  3. Crop, Deconvolution, DetectionOutput, Dropout, ELU, Eltwise, Embed, Exp, Filter, Flatten, InnerProduct, Input,
  4. LRN, Log, MVN, Normalize, PReLU, PSROIPooling, Parameter, Permute, Pooling, Power, PriorBox, Proposal, ROIPooling, ReLU,
  5. Reduction, Reshape, SPP, Scale, ShuffleChannel, Sigmoid, Slice, Softmax, Split, TanH, Threshold, Tile)

用编辑器打开caffe.vcxproj,添加

  1. <ClInclude Include="E:ubuntumini-caffesrclayersmask_pooling_layer.hpp" />
  2. <CudaCompile Include="E:ubuntumini-caffesrclayersmask_pooling_layer.cu" />
  3. <ClCompile Include="E:ubuntumini-caffesrclayersmask_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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/119800
推荐阅读
相关标签
  

闽ICP备14008679号