为什么CLion可以正确构建和链接Qt,但不能运行我的可执行文件?

时间:2019-12-05 01:44:27

标签: c++ qt cmake clion dynamic-linking

摘要

我正在尝试在Windows的Clion中编译和调试Qt代码。 CMake和构建过程均未返回错误。

发生以下情况:

  1. 当我尝试运行时,我得到Process finished with exit code -1073741511 (0xC0000139)

  2. 当我尝试调试时,我得到Process finished with exit code 1

  3. 当我尝试直接通过Windows CMD运行可执行文件时,可执行文件会按预期运行。

  4. 当我将所有dll文件从../Qt/5.12.6/mingw73_64/bin复制到项目的cmake-build-debug文件夹中时,可执行文件将在CLion中按预期方式运行和调试。

我的设置

  • Windows 10
  • Qt 5.12.6(mingw73_64构建)
  • CLion 2019.2.5
  • MinGW(x86_64-8.1.0-win32-seh-rt_v6_rev0)
  • CMake(捆绑销售,3.15.3)

其他发现

我相信关于StackOverflow的许多相关主题都涉及同一问题。但是没有人能够对我认为是路径/环境的问题提供明确的答案。许多建议归结为“将Qt添加到您的path / PATH / Path环境变量,然后重新启动,重新启动,重新启动!”,和/或大部分与linux安装有关。因此,我希望对于在此情况下遇到相同错误代码的人们来说,这可能是一个更完整的问答,因为它很可能与同一问题有关。

由于事情在CLion外部工作(如(3)所示),并且在我复制DLL(4)时在CLion内部工作,我认为由于CLion相关的环境问题,我正在处理一个动态链接问题。将Qt bin文件夹C:\Qt\5.12.6\mingw73_64\bin添加到我的System Environment Variables中就可以了,这样我就可以直接从CMD运行exe文件。请注意,我将Qt bin文件夹路径添加到了Path变量中。

鉴于有些人在网上提到由于CLion以某个系统用户身份运行而导致用户变量可能存在问题,所以我还将该路径添加为User Environment Variable,再次是Path。可惜。

此外,我尝试通过Settings -> Appearance & Behavior -> Path Variables将其作为环境变量直接添加到CLion中。在这里,我尝试将Qt bin文件夹分别映射到PathPATHQT_DIR。即使我尝试了多次重启,仍然没有成功。在更改路径等之间多次尝试Windows重新启动和真正关闭。

主要问题:

我该如何解决所描述的问题,因此我可以在CLion中运行和调试Qt构建,而不必将与Qt相关的DLL复制到可执行文件所在的cmake-build-debug中。

CMakeLists.txt

Settings -> Build, Execution, Deployment -> CMake内,我已将CMake options:设置为-DCMAKE_PREFIX_PATH=C:\\Qt\\5.12.6\\mingw73_64\\lib\\cmake

cmake_minimum_required(VERSION 3.8)
project(HelloWorld)

set(CMAKE_CXX_STANDARD 14)

# Include a library search using find_package()
# via REQUIRED, specify that libraries are required
find_package(Qt5Core REQUIRED)
find_package(Qt5Gui REQUIRED)
find_package(Qt5Widgets REQUIRED)

set(SOURCE_FILES main.cpp)
add_executable(${PROJECT_NAME} ${SOURCE_FILES})

# specify which libraries to connect
target_link_libraries(${PROJECT_NAME} Qt5::Core)
target_link_libraries(${PROJECT_NAME} Qt5::Gui)
target_link_libraries(${PROJECT_NAME} Qt5::Widgets)

main.cpp

#include <QtWidgets/QApplication>
#include <QtWidgets/QWidget>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QLabel>

int main (int argc, char * argv []) {

    QApplication app (argc, argv);

    QWidget widget;
    widget.resize (640, 480);
    widget.setWindowTitle ("Hello, world !!!");

    QGridLayout * gridLayout = new QGridLayout (& widget);

    QLabel * label = new QLabel ("Hello, world !!!");
    label-> setAlignment (Qt :: AlignVCenter | Qt :: AlignHCenter);
    gridLayout-> addWidget (label);

    widget.show ();

    return app.exec ();
}

1 个答案:

答案 0 :(得分:0)

与此同时,这已为我解决。

解决方案如下:

  1. 转到edit configurations
  2. 将Qt bin文件夹添加到Working directory
  3. OK和/或APPLY

现在,我可以直接在CLion内部运行和构建Qt应用程序了。

Edit configurations option Run/Debug Configurations window