最后结果:启动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
这个问题有两种解决方案:
为:
|
(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这样的库名称就可以了。
本文结束