You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu下用CLion构建wxWidgets应用遇编译错误求助

解决Ubuntu下CLion中wxWidgets应用的编译错误

问题1:std::filesystem命名空间无法识别

你的CMake配置指定了C14标准,而std::filesystem是C17才正式引入的特性,GCC 8及以上版本才完整支持该特性。

修复步骤:

修改CMakeLists.txt中的C++标准设置:

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

Ubuntu环境下编译时,可能需要显式链接stdc++fs库,在target_link_libraries中补充:

target_link_libraries(FirstC ${wxWidgets_LIBRARIES} stdc++fs)

问题2:wxMessageDialog移动构造函数被删除

wxWidgets的对话框类(包括wxMessageDialog)通过wxDECLARE_NO_COPY_CLASS宏禁用了拷贝和移动操作,你的代码使用了拷贝初始化语法(wxMessageDialog dlg = wxMessageDialog(...)),会触发已被删除的移动构造函数。

修复步骤:

将拷贝初始化改为直接初始化,或直接构造并调用ShowModal():

// 错误写法
wxMessageDialog dlg = wxMessageDialog(this, _("Motor inserido com sucesso. Dejesa adicionar outro?"), _("Inserção concluída"), wxYES_NO | wxICON_INFORMATION);

// 正确写法1:直接初始化
wxMessageDialog dlg(this, _("Motor inserido com sucesso. Dejesa adicionar outro?"), _("Inserção concluída"), wxYES_NO | wxICON_INFORMATION);

// 正确写法2:直接构造并显示(更简洁)
wxMessageDialog(this, _("Motor inserido com sucesso. Dejesa adicionar outro?"), _("Inserção concluída"), wxYES_NO | wxICON_INFORMATION).ShowModal();

修改后的完整CMakeLists.txt

cmake_minimum_required(VERSION 3.23)
project(Biblioteca_Motora)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

include_directories(.)
include_directories(sqlite)
set(wxWidgets_ROOT_DIR /usr/local/include/wx-3.3)
# Ubuntu下需使用GTK平台配置,替换Windows的mswu
set(wxWidgets_CONFIGURATION gtk3-unicode-3.3)
find_package(wxWidgets COMPONENTS core base std REQUIRED)
include(${wxWidgets_USE_FILE})

set(SOURCE_FILES cApp.cpp cMain.cpp cMotor.cpp cImageViewer.cpp cDataBase.cpp cLog.cpp sqlite/sqlite3.o)
add_executable(FirstC ${SOURCE_FILES})

target_link_libraries(FirstC ${wxWidgets_LIBRARIES} stdc++fs)

内容的提问来源于stack exchange,提问作者NeoFahrenheit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 03:57:22