为什么 CLion 可以正确构建 link Qt,但不能 运行 我的可执行文件?
Why can CLion correctly build and link Qt, but not run my executable?
总结
我正在 Windows 上尝试在 Clion 中编译和 run/debug Qt 代码。 CMake 和构建过程 return 都没有错误。
会出现以下情况:
当我尝试 运行 我得到 Process finished with exit code -1073741511 (0xC0000139)
当我尝试调试时,我得到 Process finished with exit code 1
当我尝试通过 Windows CMD 直接 运行 可执行文件时,可执行文件 运行 是预期的。
当我将所有 dll 文件从 ../Qt/5.12.6/mingw73_64/bin
复制到项目的 cmake-build-debug
文件夹时,可执行文件 运行s 并按预期在 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)
其他发现
我相信 Whosebug 上有很多相关主题处理相同的问题。但是 none 设法为我认为是 Path/Environment 的问题提供了明确的答案。许多建议归结为“将 Qt 添加到您的 path/PATH/Path 环境变量并重新启动重新启动重新启动!”,and/or 主要与 linux 安装有关。因此,我希望这成为人们 运行在此上下文中遇到相同错误代码的更完整的问题和答案,因为它可能与同一问题有关。
当我复制 DLL (4) 时,事情在 CLion 之外工作(如 (3) 所示)并且在 CLion 内部工作,我相信我正在处理由于 CLion 相关环境问题而导致的动态链接问题。将 C:\Qt.12.6\mingw73_64\bin
的 Qt bin 文件夹添加到我的 System Environment Variables
中,这样我就可以直接从 CMD 运行 exe 文件。请注意,我将 Qt bin 文件夹路径添加到 Path
变量。
鉴于有人在网上提到,由于 CLion 运行ning 作为某个系统用户,这可能是用户变量的问题,我也将所述路径添加为 User Environment Variable
,再次 Path
。但是唉
此外,我尝试通过 Settings -> Appearance & Behavior -> Path Variables
将其作为环境变量直接添加到 CLion 中。在这里,我尝试将 Qt bin 文件夹分别映射到 Path
、PATH
和 QT_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 ();
}
这已经为我解决了。
解决方法如下:
- 转到
edit configurations
- 将 Qt bin 文件夹添加到
Working directory
- 命中
OK
and/orAPPLY
现在我能够 运行 直接从 CLion 中构建我的 Qt 应用程序。
总结
我正在 Windows 上尝试在 Clion 中编译和 run/debug Qt 代码。 CMake 和构建过程 return 都没有错误。
会出现以下情况:
当我尝试 运行 我得到
Process finished with exit code -1073741511 (0xC0000139)
当我尝试调试时,我得到
Process finished with exit code 1
当我尝试通过 Windows CMD 直接 运行 可执行文件时,可执行文件 运行 是预期的。
当我将所有 dll 文件从
../Qt/5.12.6/mingw73_64/bin
复制到项目的cmake-build-debug
文件夹时,可执行文件 运行s 并按预期在 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)
其他发现
我相信 Whosebug 上有很多相关主题处理相同的问题。但是 none 设法为我认为是 Path/Environment 的问题提供了明确的答案。许多建议归结为“将 Qt 添加到您的 path/PATH/Path 环境变量并重新启动重新启动重新启动!”,and/or 主要与 linux 安装有关。因此,我希望这成为人们 运行在此上下文中遇到相同错误代码的更完整的问题和答案,因为它可能与同一问题有关。
当我复制 DLL (4) 时,事情在 CLion 之外工作(如 (3) 所示)并且在 CLion 内部工作,我相信我正在处理由于 CLion 相关环境问题而导致的动态链接问题。将 C:\Qt.12.6\mingw73_64\bin
的 Qt bin 文件夹添加到我的 System Environment Variables
中,这样我就可以直接从 CMD 运行 exe 文件。请注意,我将 Qt bin 文件夹路径添加到 Path
变量。
鉴于有人在网上提到,由于 CLion 运行ning 作为某个系统用户,这可能是用户变量的问题,我也将所述路径添加为 User Environment Variable
,再次 Path
。但是唉
此外,我尝试通过 Settings -> Appearance & Behavior -> Path Variables
将其作为环境变量直接添加到 CLion 中。在这里,我尝试将 Qt bin 文件夹分别映射到 Path
、PATH
和 QT_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 ();
}
这已经为我解决了。
解决方法如下:
- 转到
edit configurations
- 将 Qt bin 文件夹添加到
Working directory
- 命中
OK
and/orAPPLY
现在我能够 运行 直接从 CLion 中构建我的 Qt 应用程序。