MGZ*_*ero 9 c++ msvcrt visual-studio-2010 critical-section static-initializer
我最近收到了这个警告(VC++ 2010)
warning LNK4210: .CRT section exists; there may be unhandled static initializers or terminators
我假设这是关键部分.我的操作系统课程已经有一段时间了,所以我无法弄清楚这意味着什么.如果我没记错的话,关键部分可以使用共享资源.那么这个警告是如何相关的呢?它究竟意味着什么?
不,CRT = C运行时间.它是任何程序完成工作所需的支持库.像strcpy()这样的东西住在那里.当代码包含需要在程序开始运行之前初始化的全局变量时,.obj文件中会出现'.CRT部分'.CRT负责这一点.
这没什么不寻常的.问题是链接器没有看到CRT链接到您的程序.除了初始化要求之外,你以某种方式编写了对CRT代码没有任何依赖性的代码.很奇怪,从来没有听说有人遇到这个问题.按照文档中的清单查看其中一个是否符合您的情况.
在MSDN文档涵盖这还算不错:
一些代码引入了静态初始化器或终结器,但CRT或其等效物(需要运行静态初始化器或终结器)在应用程序启动时不会运行.导致此问题的代码示例:
- 具有构造函数,析构函数或虚函数表的全局类变量.
- 使用非编译时常量初始化的全局变量.
要解决此问题:
- 将msvcrtxx.lib,libc.lib,libcd.lib,libcmt.lib或libcmtd.lib添加到链接器命令行,或者
- 使用静态初始化程序删除所有代码.
- 不要使用/ NOENTRY.
因此,我会检查您的代码,以了解最近添加的在静态或全局范围内创建的对象.如果您没有找到,则可能隐藏在您要链接的第三方库中.无论哪种方式,最可能的解决方案是使用上面"解决此问题"部分中的第一个建议与CRT链接.
警告LNK4210:存在.CRT节;可能有未处理的静态初始值设定项或终止符
此错误是由于在项目属性中指定了入口点引起的。
请按照以下步骤操作,看看您的错误是否已解决:
1.在解决方案资源管理器中右键单击您的项目(VS 2013)
2.转到属性-所有配置
3.链接器入口点。如果已指定入口点,则将其删除。
由于BOOST_TEST自动检测到入口点,因此无需指定入口点。
希望这也有助于解决其他反硝化错误。干杯!
归档时间: |
|
查看次数: |
7854 次 |
最近记录: |