Linker:如果我在程序中不使用浮点数,"__fltused"是乘法定义的

Linker: "__fltused" is multiply defined if I don't use a float in the program

本文关键字:fltused 定义 浮点数 如果 程序 Linker      更新时间:2023-10-16

完整的输出是此(仅一个错误),并且释放构建似乎不会遇到相同的问题

SDL2.lib(SDL_stdlib.obj) : error LNK2005: __fltused already defined in LIBCMTD.lib(fltused.obj)`

我已经用/mtd和静态库重新编译了sdl2.lib,并确保它是我系统名称的唯一库。

虽然很奇怪:将浮点操作放置在我程序中的任何位置都可以链接而没有问题:

int main(int argc, char * argv[]) {
    return 0;  // will not link
}
int main(int argc, char * argv[]) {
    float flt = 0.0f; // gets around optimization
    return int(flt); // will link
}

当然,这不是理想的,这里可能是根本问题?

您可以从我记得的东西中尝试一下。

#ifdef __cplusplus 
extern "C" { 
#endif 
int __fltused=0; 
#ifdef __cplusplus 
} 
#endif

问题是如何编译SDL2。

还不够用/mtd或/mt开关来编译库以进行静态链接。库需要在编译过程中定义 HAVE_LIBC,以使其正确地链接到C运行时。