当前位置: 首页 > news >正文

Paddle在windows10+vs2019上的源码编译(失败)

最后结果:启动vs2019开始编译,无论选择release版本,还是debug版本,最后都会报错,

LNK1248 映像大小(AADA9000)超过允许的最大大小(80000000)

下面记录一下过程,目前没时间修改,如果后续编译成功了,我再来更新!

先下载paddle到本地(我的地址是D:/open/)

git clone -b release/2.2 --recursive  https://github.com/PaddlePaddle/Paddle.git

我的系统配置:windows10 + cuda11.5 + vs2019, 使用x64,

然后cmake-gui走起,

几个Configure + 1次Generator后,生成了paddle.sln解决方案。

编译时碰到几个问题的说明:

(1) google extern_protobuf项目,

https://github.com/PaddlePaddle/Paddle/issues/28391

具有类型“const google::protobuf::compiler::java::anonymous-namespace'::FieldDescriptorCompare”的表达式会丢失一些 const-volatile 限定符以调用“bool google::protobuf::compiler::java::anonymous-namespace'::FieldDescriptorCompare::operator ()(const google::protobuf::FieldDescriptor *,const google::protobuf::FieldDescriptor *)”

解决办法,

songbaoming commented on Aug 18, 2021

这个问题有两种解决方案:

  1. 修改项目路径下文件 Paddle\build\third_party\protobuf\src\extern_protobuf\src\google\protobuf\compiler\java\java_file.cc 内容:
68  bool operator ()(const FieldDescriptor* f1, const FieldDescriptor* f2) {

为:

68  bool operator ()(const FieldDescriptor* f1, const FieldDescriptor* f2) const {
  1. 切换 extern_protobuf 到 01a05a53f40ca2ac5f0af10c6cc0810bee39b792
cd Paddle\build\third_party\protobuf\src\extern_protobuf
git checkout 01a05a53f40ca2ac5f0af10c6cc0810bee39b792 --

(2) std::max冲突

错误(活动)    E0040    应输入标识符    matmul_v2_op    D:\open\Paddle\paddle\fluid\operators\matmul_v2_op.cc    80   

 这个是由该死的std::max 和微软自定义的#define max 冲突引起的,微软在minwindef.h中定义了这个东西,
#define max(a,b)            (((a) > (b)) ? (a) : (b))
如果包含(windows.h)这个头文件的话,就会冲突;

解决办法,

添加编译选项#define NOMINMAX,避开微软的自定义。

做法就是直接在matmul_v2_op这个项目上添加预编译参数NOMINMAX。

(3)Debug-->glog.lib找不到(当然,最后Debug版本无法编译成功是因为库大小问题,不是这个)

严重性    代码    说明    项目    文件    行    禁止显示状态
错误    LNK1104    无法打开文件“..\..\..\third_party\install\glog\lib\glog.lib”    op_function_generator    D:\open\Paddle\dev\paddle\fluid\pybind\LINK    1    
 这个错误明显是找不到库,这是因为我这里选的是Debug编译,而此时生成的是glogd.lib,而不是glog.lib。

悲催的vs2019在链接->附加依赖项中因为字数限制,已经没法改。所以只好用词本打开,

D:\open\Paddle\dev\paddle\fluid\pybind\op_function_generator.vcxproj

然后找到Debug那个项目

<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">

再找到下面了子条款glog.lib(貌似有两条重复的,可删除掉其中一条),把它改成glogd.lib就OK了。

同样还需要修改的地方有:

gflags_static.lib  --> gflags_static_debug.lib

当然,另一个办法就是找到glog这样的项目,无论是debug还是release统一都生成glog.lib这样的库名称就可以了。

本文结束

相关文章:

  • Tesseract-OCR试运行
  • Tesseract-OCR在Windows10(VS2019+vcpkg)平台上的编译与使用
  • Tesseract-OCR:在Windows10(VS2019+SW)平台上的编译与使用
  • Tesseract-OCR在Ubuntu20.04平台上使用
  • ROS2 Error: Could not find a package configuration file provided by “turtlebot3_msgs“
  • ROS2 + colcon build 常见的一些报错
  • ROS2进阶:安装与初体验(附choco介绍)
  • ROS2进阶:colcon的初步使用--‘colcon‘ is not recognized
  • ROS2进阶:基本指令与RVIZ2介绍
  • Windows控制台cmd默认代码页修改的办法【GBK、UTF-8】
  • ROS2 ERROR: qt.qpa.plugin: Could not find the Qt platform plugin “windows“ in
  • ROS2 Warning: RosPluginProvider._parse_plugin_xml() plugin file rqt_gui_cpp/plugin.xml not found
  • ROS2进阶:turtlesim与rqt
  • TCP/UDP常见的端口号
  • ROS2进阶:基于cmake创建自己的开发包
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 2018一半小结一波
  • Docker: 容器互访的三种方式
  • ERLANG 网工修炼笔记 ---- UDP
  • fetch 从初识到应用
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • Java多线程(4):使用线程池执行定时任务
  • JS基础之数据类型、对象、原型、原型链、继承
  • Just for fun——迅速写完快速排序
  • Linux中的硬链接与软链接
  • Python学习之路16-使用API
  • ubuntu 下nginx安装 并支持https协议
  • 前端临床手札——文件上传
  • 入口文件开始,分析Vue源码实现
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 智能合约开发环境搭建及Hello World合约
  • AI算硅基生命吗,为什么?
  • #传输# #传输数据判断#
  • $.ajax()
  • (3)STL算法之搜索
  • (笔试题)合法字符串
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)菜鸟学数据库(三)——存储过程
  • .net 程序发生了一个不可捕获的异常
  • .NET 中创建支持集合初始化器的类型
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • @media screen 针对不同移动设备
  • [] 与 [[]], -gt 与 > 的比较
  • [20170728]oracle保留字.txt
  • [Android]通过PhoneLookup读取所有电话号码
  • [C++] 如何使用Visual Studio 2022 + QT6创建桌面应用
  • [CSS]中子元素在父元素中居中
  • [Grafana]ES数据源Alert告警发送
  • [Linux] PXE批量装机
  • [Linux]知识整理(持续更新)
  • [NOIP2014普及组]子矩阵