Qt代码块-出现严重错误

Qt代码块-出现严重错误,qt,codeblocks,Qt,Codeblocks,在代码块中创建qt项目并运行它之后,我得到: 有人知道如何解决吗? 谢谢在我看来,这就像是针对一个版本的Qt进行构建,并在运行时针对另一个版本进行链接。运行QtSDK维护工具并删除您不需要的任何版本的Qt Desktop。然后,您可能需要将代码块重新指向正确的头 我猜,如果您是从代码块内运行,那么您必须明确指定在运行新构建的应用程序时要使用哪些DLL。如果是这样,请确保这些是正确的版本(即用QT INSTALL DIR\Desktop\4.7.x\mingw\bin中的DLL替换它们。[虽然我

在代码块中创建qt项目并运行它之后,我得到:

有人知道如何解决吗?

谢谢

在我看来,这就像是针对一个版本的Qt进行构建,并在运行时针对另一个版本进行链接。运行QtSDK维护工具并删除您不需要的任何版本的Qt Desktop。然后,您可能需要将代码块重新指向正确的头

我猜,如果您是从代码块内运行,那么您必须明确指定在运行新构建的应用程序时要使用哪些DLL。如果是这样,请确保这些是正确的版本(即用QT INSTALL DIR\Desktop\4.7.x\mingw\bin中的DLL替换它们。[虽然我目前不在工作电脑上,因此此路径可能有点错误。请确保您位于正确的4.7.x文件夹中])


老实说,如果你是在Windows上运行,为什么不使用QtCreator呢?除了在GDB集成方面稍有欠缺外,它还相当不错,你会发现这样的问题很难解决。

在我看来,这就像是在构建一个版本的Qt,并在运行时链接另一个版本。运行QtSDK维护工具并删除您不需要的任何版本的Qt Desktop。然后,您可能需要将代码块重新指向正确的头

我猜,如果您是从代码块内运行,那么您必须明确指定在运行新构建的应用程序时要使用哪些DLL。如果是这样,请确保这些是正确的版本(即用QT INSTALL DIR\Desktop\4.7.x\mingw\bin中的DLL替换它们。[虽然我目前不在工作电脑上,因此此路径可能有点错误。请确保您位于正确的4.7.x文件夹中])

老实说,如果你是在Windows上运行,为什么不使用QtCreator呢?除了在GDB集成方面稍有欠缺外,它还相当不错,你会发现这样的问题很难遇到。

这是(尤其是在Windows上)一个常见的问题。安装QtSDK时,您将获得至少2个同名但版本不同的.dll。您可能会链接到预期的(dev-)库,但在运行时使用了设计器/创建者的版本

避免这种情况的最简单方法是将正确版本的dll与二进制文件(.exe和其他文件)一起部署到一个单独的文件夹中。这可以通过修改构建脚本来实现。它取决于您的构建系统,通常是qmake/.pro或cmake/CMakeLists.txt

至于CMake,给定一个包含要部署的文件路径的环境变量
myqtdldir
,您可以使用类似以下内容:

configure_file($ENV{MYQTDLLDIR}/QtCore4.dll ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
configure_file($ENV{MYQTDLLDIR}/QtGui4.dll ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
cmake中剥离的文档--完整帮助

配置文件将文件复制到另一个位置并修改其 内容

配置_文件( [COPYONLY][ESCAPE_QUOTES][@ONLY])

将文件复制到文件并替换变量 文件内容中引用的值。如果你是亲戚 相对于当前源目录对其求值的路径。 文件必须是文件,而不是目录。如果是 相对于当前二进制文件计算的相对路径 目录如果将现有目录命名为输入文件 以其原始名称放置在该目录中

此命令将替换输入文件中引用为的任何变量 ${VAR}或@VAR@及其值由CMake确定。如果a
变量未定义,它将被替换为零。如果
指定COPYONLY,则不会进行变量扩展。如果 如果指定了ESCAPE_引号,则任何替换的引号都将是C样式的 逃脱。该文件将使用CMake的当前值进行配置 变量。如果指定了@ONLY,则仅使用@VAR@形式的变量
将被替换,${VAR}将被忽略。这对
正在配置使用${VAR}的脚本。任何出现的#cmakedefine VAR将替换为#定义VAR或/*#未定义VAR*/
取决于CMake中VAR的设置。任何
#cmakedefine01 VAR将替换为#define VAR 1或 #定义VAR 0>取决于VAR在中的计算结果是TRUE还是FALSE 克马克

至于qmake,您可以使用
安装
(在调用
make install
时使用)或在链接后执行“普通命令”。使用:

qmake使用命令执行:

win32 {
    EXTRA_BINFILES += \
        $${MYQTDLLDIR}/QtCore4.dll \
        $${MYQTDLLDIR}/QtGui4.dll
    EXTRA_BINFILES_WIN = $${EXTRA_BINFILES}
    EXTRA_BINFILES_WIN ~= s,/,\\,g
        DESTDIR_WIN = $${DESTDIR}
    DESTDIR_WIN ~= s,/,\\,g
    for(FILE,EXTRA_BINFILES_WIN){
                QMAKE_POST_LINK +=$$quote(cmd /c copy /y $${FILE} $${DESTDIR_WIN}$$escape_expand(\n\t))
    }
}
这是(特别是在Windows上)一个常见问题。安装QtSDK时,您将获得至少2个同名但版本不同的.dll。您可能会链接到预期的(dev-)库,但在运行时使用了设计器/创建者的版本

避免这种情况的最简单方法是将正确版本的dll与二进制文件(.exe和其他文件)一起部署到一个单独的文件夹中。这可以通过修改构建脚本来实现。它取决于您的构建系统,通常是qmake/.pro或cmake/CMakeLists.txt

至于CMake,给定一个包含要部署的文件路径的环境变量
myqtdldir
,您可以使用类似以下内容:

configure_file($ENV{MYQTDLLDIR}/QtCore4.dll ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
configure_file($ENV{MYQTDLLDIR}/QtGui4.dll ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
cmake中剥离的文档--完整帮助

配置文件将文件复制到另一个位置并修改其 内容

配置_文件( [COPYONLY][ESCAPE_QUOTES][@ONLY])

将文件复制到文件并替换变量 文件内容中引用的值。如果你是亲戚 相对于当前源目录对其求值的路径。 文件必须是文件,而不是目录。如果是 相对于当前二进制文件计算的相对路径 目录如果将现有目录命名为输入文件 以其原始名称放置在该目录中

此命令将替换任何变量