Tho*_*mas 6 linker crt visual-c++
这是一系列至少两个密切相关但不同的问题的一部分.我希望我能分别问他们做对了.
我试图让我的Visual C++ 2008应用程序在没有C运行时库的情况下工作.这是一个没有MFC或其他花哨的东西的Win32 GUI应用程序,只是简单的Windows API.
所以我将Project Properties - > Configuration - > C/C++ - > Advanced - > Omit Default Library Names设置为Yes(编译器标志/Zl)并重建.让我假装我写了一个合适的入口点函数,这是我的另一个问题的主题.
我收到两个链接器错误; 他们可能是相关的.链接器抱怨无法解析的外部符号__fltused和_memcpy在foobar.obj.毋庸置疑,我在我的程序中没有明确使用,但我确实memcpy在某处使用foobar.cpp.(我会使用,CopyMemory但结果证明是#defined与memcpy... 相同)
(我以为我可以memcpy通过使用编译器内部函数来解决问题#pragma intrinsic(memcpy),但这没有区别.)
如果我查看预处理器输出(添加/P到编译器命令行),我看到没有引用任何一个__fltused或_memcpy在foobar.i.
所以,我的问题是:这些链接器错误来自何处,以及如何解决它们?
Chr*_*cke 10
__fltused意味着你正在使用或至少声明了一些花车或双打.编译器注入此"无用"符号以使浮动支持.obj从crt加载.您可以通过简单地声明带有名称的符号来解决这个问题
#ifdef __cplusplus
extern "C" {
#endif
int _fltused=0; // it should be a single underscore since the double one is the mangled name
#ifdef __cplusplus
}
#endif
Run Code Online (Sandbox Code Playgroud)
WRT _memcpy - memcpy是一个__cdecl函数,所有cdecl函数都会自动_作为其装饰的一部分.所以,当你说"__cdecl memcpy"时 - 编译器和链接器会寻找一个名为'_memcpy'的符号.如果构建设置具有反对内在函数的调试设置,则仍然可以导入内在函数 - 甚至是明确请求的内容函数.因此,无论如何,您将需要在某些时候实现自己的memcpy和相关功能.
| 归档时间: |
|
| 查看次数: |
6550 次 |
| 最近记录: |