精易论坛

标题: 静态编译错误 [打印本页]

作者: lenmei233    时间: 2024-8-7 08:27
标题: 静态编译错误
开始静态链接...
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)
Nostalgia Minecraft Launcher II.obj : error LNK2001: unresolved external symbol _console_ProcessNotifyLib_console@12
C:\Users\lenmei233\Desktop\Nostalgia Minecraft Launcher II.exe : fatal error LNK1120: 1 unresolved externals
静态连接失败

以上为静态编译报错信息



作者: fire9    时间: 2024-8-7 08:28
换其它版本的试试,比如v6
作者: 宇Y杰    时间: 2024-8-7 08:33
试试这个VC6
作者: suyunsq    时间: 2024-8-7 08:39
提示: 作者被禁止或删除 内容自动屏蔽
作者: kk2apple    时间: 2024-8-7 08:43
你遇到的问题是由于你的项目中混合使用了多线程和单线程C运行时库(libcmt.lib和libc.lib),这造成了重复定义的冲突。解决这个问题的关键是确保项目整体使用一致的C运行时库。

请按照以下步骤解决此问题:

### 步骤1:确定项目使用哪种C运行时库

你需要决定是使用多线程库(libcmt.lib)还是单线程库(libc.lib)。一般来说,多线程库是推荐的,因为它更符合现代应用程序的需求。

### 步骤2:项目配置设置

根据你选择的库类型,请在Visual Studio中调整项目设置:

1. 右键点击你的项目,选择“属性”。
2. 导航到`Configuration Properties -> C/C++ -> Code Generation`。
3. 在右侧找到`Runtime Library`选项。

   - 如果你选择使用多线程库,请将其设置为`Multi-threaded (/MT)`或`Multi-threaded DLL (/MD)`。
   - 如果你选择使用单线程库,请将其设置为`Single-threaded (/ML)`或`Single-threaded DLL (/MLD)`。

### 步骤3:确保所有项目一致

如果你有多个项目并且它们相互依赖,请确保所有项目都使用相同的运行时库设置。这将避免类似的链接冲突。

### 步骤4:清理和重建

在修改完设置后,建议你清理和重建整个解决方案:

1. 右键点击解决方案,选择`Clean Solution`。
2. 然后右键选择`Rebuild Solution`。

### 额外提示:解决未定义的外部符号

关于`Nostalgia Minecraft Launcher II.obj`中的未解析的外部符号错误:

- 检查`_console_ProcessNotifyLib_console@12`函数的定义是否已导入到工程中。
- 确保你已正确链接所有依赖的库,特别是定义这个符号的库。

你可以通过以下步骤确认:

1. 检查项目的依赖项设置,确保正确添加了所有依赖库。
2. 通过`Additional Dependencies`或者`Additional Library Directories`来指定外部库的路径。

调整这些设置并清理重建解决方案后,应该能解决多余符号的链接冲突。如果还有错误,请详细检查未解析符号所在的具体代码。
作者: lenmei233    时间: 2024-8-7 09:05
fire9 发表于 2024-8-7 08:28
换其它版本的试试,比如v6

我现在使用的就是VC6
作者: lenmei233    时间: 2024-8-7 09:05
宇Y杰 发表于 2024-8-7 08:33
试试这个VC6

当前使用的就是这个
作者: fire9    时间: 2024-8-7 09:15
lenmei233 发表于 2024-8-7 09:05
我现在使用的就是VC6

其它的也试试。
作者: lenmei233    时间: 2024-8-7 09:26
fire9 发表于 2024-8-7 09:15
其它的也试试。

都试了还是不行
作者: 小馬哥    时间: 2024-8-7 10:23
1、打开易语言目录
2、找到tools文件夹打开
3、打开link.ini,滑倒最底部
4、填写extra_args=/NODEFAULTLIB:LIBC.LIB
5、保存即可!
作者: lenmei233    时间: 2024-8-7 10:42
小馬哥 发表于 2024-8-7 10:23
1、打开易语言目录
2、找到tools文件夹打开
3、打开link.ini,滑倒最底部

谢谢,这次报错减少了很多但是还是无法正常进行静态编译
Nostalgia Minecraft Launcher II.obj : error LNK2001: unresolved external symbol _console_ProcessNotifyLib_console@12
E:\NMCL\dev\编译\output\Nostalgia Minecraft Launcher II.exe : fatal error LNK1120: 1 unresolved externals

补充内容 (2024-12-8 18:31):
因为很多人问我怎么解决的,下面分享我的解决方法

补充内容 (2024-12-8 18:33):
https://netcut.cn/p/a7be86b9814d1974
作者: 张宝元    时间: 2024-8-7 16:13
这个问题我遇到过,试了很多方法才研究明白。
就是你使用了某个支持库命令,但是那个支持库不支持你这种静态编译。我当时是用了标准模板库2.0的命令,去掉这里的命令就没事。

第2种解决办法 ,不要静态编译,使用独立编译一样可以。
作者: lenmei233    时间: 2024-8-14 22:07
张宝元 发表于 2024-8-7 16:13
这个问题我遇到过,试了很多方法才研究明白。
就是你使用了某个支持库命令,但是那个支持库不支持你这种静 ...

好的,现在我就是用独立
作者: lenmei233    时间: 2024-8-20 22:39
小馬哥 发表于 2024-8-7 10:23
1、打开易语言目录
2、找到tools文件夹打开
3、打开link.ini,滑倒最底部

还是不行,大佬
作者: lenmei233    时间: 2024-8-21 21:07
小馬哥 发表于 2024-8-7 10:23
1、打开易语言目录
2、找到tools文件夹打开
3、打开link.ini,滑倒最底部

还是不行的
作者: lenmei233    时间: 2024-8-26 13:32
问题我已经自行解决
作者: 曦月    时间: 2024-10-3 20:33
lenmei233 发表于 2024-8-26 13:32
问题我已经自行解决

大佬怎么解决的?




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4