在codeblocks中创建qt项目并运行它之后我得到了:
任何人都知道如何解决它? 感谢
答案 0 :(得分:4)
这让我觉得你正在构建一个版本的Qt并在运行时链接另一个版本。运行QtSDK维护工具并删除不需要的任何版本的Qt桌面。然后,您可能需要在正确的标头处重新编写代码块。
我猜测如果你在Codeblocks中运行,你必须明确指定在运行新构建的应用程序时使用哪些dll。如果是这样,请确保它们是正确的版本(即用 QT INSTALL DIR \ Desktop \ 4.7.x \ mingw \ bin 替换dll [虽然我不在我的工作PC上那一刻,所以这条路可能有点错误。只要确保你在正确的 4.7.x 文件夹中)。
老实说,如果你是从Windows运行,为什么不使用QtCreator?除了略微缺乏GDB集成方面,它还是相当不错的,你会发现这样的问题更难以解决。
答案 1 :(得分:0)
这是(特别是在Windows上)一个常见问题。安装Qt SDK时,您将获得至少2个具有相同名称但版本不同的.dll。碰巧,您链接到预期的(dev-)lib,但在运行时使用Designer / Creator的版本。
避免这种情况的最简单方法是将dll的正确版本与二进制文件(.exe和stuff)一起部署在一个单独的文件夹中。这可以通过修改构建脚本来实现。这取决于您的构建系统,通常是qmake / .pro或cmake / CMakeLists.txt。
至于CMake,给定一个环境变量MYQTDLLDIR
,其中包含要部署的文件的路径,你可以使用类似的东西:
configure_file($ENV{MYQTDLLDIR}/QtCore4.dll ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
configure_file($ENV{MYQTDLLDIR}/QtGui4.dll ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
文档摘自cmake --help-full
:
configure_file将文件复制到另一个位置并修改它 内容。
configure_file( [COPYONLY] [ESCAPE_QUOTES] [@ONLY])
将文件复制到文件并替换变量 文件内容中引用的值。如果是亲戚 路径是根据当前源目录进行评估的。 必须是文件,而不是目录。如果是 它是相对于当前二进制文件计算的相对路径 目录。如果为输入文件命名现有目录 以原始名称放在该目录中。
此命令替换引用的输入文件中的所有变量 $ {VAR}或@ VAR @及其值由CMake确定。如果是 变量未定义,它将被替换为空。如果
指定COPYONLY,则不会发生变量扩展。如果 指定ESCAPE_QUOTES,然后任何替换的引号将是C风格 逃过一劫。该文件将配置CMake的当前值 变量。如果指定了@ONLY,则只显示@ VAR @
形式的变量 将被替换,$ {VAR}将被忽略。这对于有用 配置使用$ {VAR}的脚本。任何#cmakedefine的出现 VAR将替换为#define VAR或/ * #undef VAR * /
取决于CMake中VAR的设置。任何出现的 #cmakedefine01 VAR将替换为#define VAR 1或 #define VAR 0>取决于VAR评估为TRUE还是FALSE CMake的
至于qmake,您可以使用INSTALLS
(在调用make install
时使用)或在链接后执行“普通命令”。使用INSTALLS:
mytarget.path = /output/path
mytarget.files += /path/to/QtCore4.dll
mytarget.files += /path/to/QtGui4.dll
INSTALLS += mytarget
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))
}
}