神刀安全网

易语言LIBC.lib(crt0dat.obj)静态独立编译时失败出错怎样解决

正在编译现行程序
正在检查重复名称…
正在预处理现行程序
正在进行名称连接…
正在统计需要编译的子程序
正在编译…
正在生成主程序入口代码
程序代码编译成功
等待用户输入欲编译到的文件名
正在进行名称连接…
开始静态链接…
libc.lib(crt0dat.obj) : error LNK2005: __cinit already defined in Libcmt.lib(crt0dat.obj)
libc.lib(crt0dat.obj) : error LNK2005: _exit already defined in Libcmt.lib(crt0dat.obj)
libc.lib(crt0dat.obj) : error LNK2005: __exit already defined in Libcmt.lib(crt0dat.obj)
libc.lib(crt0dat.obj) : error LNK2005: __cexit already defined in Libcmt.lib(crt0dat.obj)
libc.lib(crt0dat.obj) : error LNK2005: __c_exit already defined in Libcmt.lib(crt0dat.obj)
libc.lib(crt0dat.obj) : error LNK2005: __C_Exit_Done already defined in Libcmt.lib(crt0dat.obj)
libc.lib(crt0dat.obj) : error LNK2005: __C_Termination_Done already defined in Libcmt.lib(crt0dat.obj)
libc.lib(crt0dat.obj) : error LNK2005: __exitflag already defined in Libcmt.lib(crt0dat.obj)
libc.lib(crt0dat.obj) : error LNK2005: __wpgmptr already defined in Libcmt.lib(crt0dat.obj)
libc.lib(crt0dat.obj) : error LNK2005: __pgmptr already defined in Libcmt.lib(crt0dat.obj)
libc.lib(crt0dat.obj) : error LNK2005: ___winitenv already defined in Libcmt.lib(crt0dat.obj)
libc.lib(crt0dat.obj) : error LNK2005: __wenviron already defined in Libcmt.lib(crt0dat.obj)
libc.lib(crt0dat.obj) : error LNK2005: ___initenv already defined in Libcmt.lib(crt0dat.obj)
libc.lib(crt0dat.obj) : error LNK2005: __environ already defined in Libcmt.lib(crt0dat.obj)
libc.lib(crt0dat.obj) : error LNK2005: ___wargv already defined in Libcmt.lib(crt0dat.obj)
libc.lib(crt0dat.obj) : error LNK2005: ___argv already defined in Libcmt.lib(crt0dat.obj)
libc.lib(crt0dat.obj) : error LNK2005: ___argc already defined in Libcmt.lib(crt0dat.obj)
libc.lib(crt0dat.obj) : error LNK2005: __winminor already defined in Libcmt.lib(crt0dat.obj)
libc.lib(crt0dat.obj) : error LNK2005: __winmajor already defined in Libcmt.lib(crt0dat.obj)
libc.lib(crt0dat.obj) : error LNK2005: __winver already defined in Libcmt.lib(crt0dat.obj)
libc.lib(crt0dat.obj) : error LNK2005: __osver already defined in Libcmt.lib(crt0dat.obj)
libc.lib(crt0dat.obj) : error LNK2005: __umaskval already defined in Libcmt.lib(crt0dat.obj)

H:\软件\编译后\神刀安全网.exe : fatal error LNK1169: one or more multiply defined symbols found
静态连接失败

 

手工编译 :
首先修改link.ini的配置把show_command_line=yes和retain_intermediate_files=yes打开,然后再进行编译,编译之后把编译输出的 命令部分提取出来,例如:

“D:\E\VC98linker\bin\link.exe” “G:\test.obj” “D:\E\static_lib\krnln_static.lib” “D:\E\static_lib\script_static.lib” “D:\E\static_lib\spec_static.lib” “D:\E\static_lib\json_static.lib” “D:\E\static_lib\RegEx_static.lib” kernel32.lib user32.lib gdi32.lib winmm.lib msimg32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib “G:\test.res” /LIBPATH:”D:\E\static_lib” /nologo /machine:I386 /subsystem:windows /out:”G:\test.exe”

 

然后加上

 

/NOD:libc.lib /LIBPATH:”你的vclinker路径\lib” /LIBPATH:”你的vclinker路径\MFC\lib”

修改之后变成

 

“D:\E\VC98linker\bin\link.exe” “G:\test.obj” “D:\E\static_lib\krnln_static.lib” “D:\E\static_lib\script_static.lib” “D:\E\static_lib\spec_static.lib” “D:\E\static_lib\json_static.lib” “D:\E\static_lib\RegEx_static.lib” kernel32.lib user32.lib gdi32.lib winmm.lib msimg32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib “G:\test.res” /LIBPATH:”D:\E\static_lib” /nologo /machine:I386 /subsystem:windows /out:”G:\test.exe” /NOD:libc.lib  /LIBPATH:”D:\E\VC98linker\lib”  /LIBPATH:”D:\E\VC98linker\MFC\lib”

 

然后把这个命令放到cmd运行,这样就可以正常编译了
原因是libc.lib 和 libcmt.lib有符号冲突,把libc.lib注释掉(libcmt.lib已经包含了libc.lib的函数)就能正常编译了

 

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » 易语言LIBC.lib(crt0dat.obj)静态独立编译时失败出错怎样解决

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
分享按钮