最后结果:启动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走起,

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

几个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 内容:

为:

  1. 切换 extern_protobuf 到 01a05a53f40ca2ac5f0af10c6cc0810bee39b792


(2) std::max冲突

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

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

 这个是由该死的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    

Paddle在windows10+vs2019上的源码编译(失败)_paddle_03 这个错误明显是找不到库,这是因为我这里选的是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这样的库名称就可以了。

本文结束