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
相关产品推荐
相关产品推荐

