【问题标题】:fatal error C1047 in release build only仅在发布版本中出现致命错误 C1047
【发布时间】:2014-10-16 11:12:04
【问题描述】:

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

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 

【问题讨论】:

    标签: c++ visual-studio-2012 linker fftw


    【解决方案1】:

    在发布配置下右键单击您的项目 配置属性->常规->全程序优化->“无全程序优化”

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

    【讨论】:

    • 和依赖库一样!
    【解决方案2】:

    知道发生了什么吗?

    是的:

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


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

    你可以:

    重建旧对象和库


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

    下载二进制文件并尝试将它们链接到其中很少有效果。如果它们不是使用相同的设置和兼容的编译器/链接器编译的,你会遇到各种各样的问题。正在尝试使用。

    【讨论】:

    • 好的,但是我该如何重建呢?我对 MinGW 不太熟悉,以及如何正确使用它,尤其是确保它使用我认为的正确工具集?如何获取 Linux/MinGW 源代码来为 VS2012 创建工作库?
    • 你不想用 MinGW 重建它,这完全违背了这一点。您想使用 VS 2012(或您为 your 项目使用的任何构建系统)重建它。这确保了它是兼容的。
    猜你喜欢
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 2019-10-02
    • 2016-01-31
    • 1970-01-01
    相关资源
    最近更新 更多