Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 仅在发布版本中出现致命错误C1047_C++_Visual Studio 2012_Linker_Fftw - Fatal编程技术网

C++ 仅在发布版本中出现致命错误C1047

C++ 仅在发布版本中出现致命错误C1047,c++,visual-studio-2012,linker,fftw,C++,Visual Studio 2012,Linker,Fftw,我的项目使用Visual Studio 2012,我使用的libfftw-3.3.lib来自他们的页面。 当我在debug中构建项目时,它链接和编译都很好,我得到了一个工作的应用程序。 当我将其设置为释放模式时,链接器会显示以下错误: 2>LINK : fatal error C1047: The object or library file '../IncludeLibs/libfftw-3.3-x86.lib' was created with an older compiler th

我的项目使用Visual Studio 2012,我使用的libfftw-3.3.lib来自他们的页面。 当我在debug中构建项目时,它链接和编译都很好,我得到了一个工作的应用程序。 当我将其设置为释放模式时,链接器会显示以下错误:

2>LINK : fatal error C1047: The object or library file '../IncludeLibs/libfftw-3.3-x86.lib' was created with an older compiler than other objects; rebuild old objects and libraries
2>LINK : fatal error LNK1257: code generation failed
当我将项目设置为输出.lib时,即使在发布模式下,它也可以工作,但不能作为.dll或.exe

知道发生了什么,或者我能做些什么来解决这个问题吗

编辑: 我的链接器设置,调试:

/OUT:"G:\GlukoseScanner\GlucoseScanner\Debug\MachineLearning.exe" /MANIFEST /NXCOMPAT /PDB:"G:\GlukoseScanner\GlucoseScanner\Debug\MachineLearning.pdb" /DYNAMICBASE "../debug/GlucoseDLL.lib" "shlwapi.lib" "../PicoScope/ps5000a.lib" "../C/cbw32.lib" "../DSO2250_SDK/Lib/SDK2250DLL.lib" "../IncludeLibs/libfftw-3.3-x86.lib" "../IncludeLibs/libfftwf-3.3-x86.lib" "mlpack.lib" "winmm.lib" "opengl32.lib" "glu32.lib" "..\..\armadillo-4.400.1\build\Release\armadillo.lib" "..\..\armadillo-4.400.1\examples\lib_win32\libblas.lib" "..\..\armadillo-4.400.1\examples\lib_win32\liblapack.lib" "..\libxml2\libxml2-2.7.8.win32\lib\libxml2.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /DEBUG /MACHINE:X86 /INCREMENTAL /PGD:"G:\GlukoseScanner\GlucoseScanner\Debug\MachineLearning.pgd" /SUBSYSTEM:CONSOLE /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"Debug\MachineLearning.exe.intermediate.manifest" /ERRORREPORT:PROMPT /NOLOGO /TLBID:1 
要发布的链接设置:

/OUT:"G:\GlukoseScanner\GlucoseScanner\Release\MachineLearning.exe" /MANIFEST /LTCG /NXCOMPAT /PDB:"G:\GlukoseScanner\GlucoseScanner\Release\MachineLearning.pdb" /DYNAMICBASE "../release/GlucoseDLL.lib" "shlwapi.lib" "../PicoScope/ps5000a.lib" "../C/cbw32.lib" "../DSO2250_SDK/Lib/SDK2250DLL.lib" "../IncludeLibs/libfftw-3.3-x86.lib" "../IncludeLibs/libfftwf-3.3-x86.lib" "mlpack.lib" "winmm.lib" "opengl32.lib" "glu32.lib" "..\..\armadillo-4.400.1\build\Release\armadillo.lib" "..\..\armadillo-4.400.1\examples\lib_win32\libblas.lib" "..\..\armadillo-4.400.1\examples\lib_win32\liblapack.lib" "..\libxml2\libxml2-2.7.8.win32\lib\libxml2.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /DEBUG /MACHINE:X86 /OPT:REF /SAFESEH /INCREMENTAL:NO /PGD:"G:\GlukoseScanner\GlucoseScanner\Release\MachineLearning.pgd" /SUBSYSTEM:CONSOLE /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"Release\MachineLearning.exe.intermediate.manifest" /OPT:ICF /ERRORREPORT:PROMPT /NOLOGO /TLBID:1 
知道发生了什么事吗?

是的:

对象或库文件“../IncludeLibs/libfftw-3.3-x86.lib”是使用比其他对象更旧的编译器创建的


我能做些什么来解决这个问题?

你可以:

重建旧对象和库


看起来调试版本链接到的库版本与发布版本不同。最简单的方法是下载您正在使用的库的源代码,并使用用于构建项目的相同构建系统构建它


下载二进制文件并尝试将它们链接起来,效果很差。如果没有使用与您尝试使用的编译器/链接器相同的设置和兼容的编译器/链接器进行编译,您将遇到各种问题。

右键单击“版本配置”下的项目 配置属性->常规->整个程序优化->无整个程序优化


您的链接库可能无法启用LTCG优化,VS2012无法使用/LTCG优化您的程序

好吧,但我怎么能重建它呢?我不太熟悉MinGW,以及如何正确使用它,尤其是确保它使用正确的工具集?我如何获得Linux/MinGW源代码来为VS2012创建工作库?您不想用MinGW重建它,这就破坏了整个要点。您希望使用VS 2012(或您在项目中使用的任何构建系统)重建它。这确保了它的兼容性。并且在依赖项库上也是如此!