【发布时间】:2015-05-22 13:58:52
【问题描述】:
所以在工作中,我正在开发一个在没有 C++ 运行时库的情况下运行的 C++ 应用程序。我们使用的是 Visual Studio 2005,并指定了 /NODEFAULTLIB 开关。
解决方案的组织方式是有各种静态库项目,然后是使用这些库的单个可执行项目。这些库主要是在单独的存储库中跟踪的常见库。它们可以更改,但我们最好不要更改,如果可以避免的话。
其中一个常用库使用浮点数学。由于我们没有 C++ 运行时,我们自己定义了这些例程(例如:_ftol2_sse 用于将 float 转换为 int)。
根据我对底层细节的(相当有限的)理解,编译器发出符号_fltused 表示需要使用浮点数学例程。
由于某种原因,其他常用库之一决定手动定义此符号,如
extern "C" { unsigned short _fltused = 0; };
当我启用整个程序优化和链接时代码生成时,我得到 p>
warning C4743: '_fltused' has different size ...
链接时。我不知道为什么我们将它声明为unsigned short 而不是int,但就是这样。
当我不启用整体程序优化或 LTCG 时,警告就会消失。
我想我有两个问题。
- 我可以放心地忽略此警告吗?
- 进行了哪些优化会导致出现警告?我不知道为什么在没有启用整体程序优化的情况下它不是警告。
更新
我找到了代码的原作者,他承认这是用汇编语言重写代码时出现的错误。他同意我的观点,警告是无害的,因为_fltused 从未真正直接使用过。
【问题讨论】:
标签: c++ linker visual-studio-2005