C++ 链接器:“链接器”__fltused”的英文缩写;如果不使用',则为乘法定义;不要在程序中使用浮点
完整的输出是这样的(只有一个错误),发布版本似乎没有遇到同样的问题C++ 链接器:“链接器”__fltused”的英文缩写;如果不使用',则为乘法定义;不要在程序中使用浮点,c++,visual-studio,linker,sdl-2,C++,Visual Studio,Linker,Sdl 2,完整的输出是这样的(只有一个错误),发布版本似乎没有遇到同样的问题 SDL2.lib(SDL_stdlib.obj) : error LNK2005: __fltused already defined in LIBCMTD.lib(fltused.obj)` 我已经用/MTd和将SDL2.lib重新编译为一个静态库,并确保它是我的系统中唯一的同名库 不过,这有点奇怪:在我的程序中的任何位置放置浮点操作都可以让它毫无问题地链接: int main(int argc, char * argv[]
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开关编译库是不够的。该库还需要在编译过程中定义_LIBC,以便它能够正确地静态链接到C运行时。这表明您正在链接到多个版本的C运行时库。您说过您用/MTd重新编译了SDL2.lib;你的应用程序是用什么编译的?它也应该用/MTd编译。@CodyGray-yes,SDL2和我的可执行文件都是/MTd用于调试,/MT用于发布,我进行了三次检查,因为这似乎是最常见的原因,这是唯一可能的原因。CRT是定义
\u fltused
符号的部件。您是否正在链接可能使用不同版本的运行库编译的任何其他LIB文件?@CodyGray-我的其他LIB是OpenGL32.LIB;glu32.lib;winmm.lib;imm32.lib;version.lib代码>不幸的是。。。所以我不知所措。不知道为什么使用浮动会允许它链接