使用 wxWidgets 的项目的 cmake 链接器配置

标签 cmake configuration linker cross-platform wxwidgets

我遇到以下问题。我想创建一个使用 wxWidgets 的跨平台 GUI 应用程序 我正在尝试编译并运行 "Hello World" example来自 wxWidgets 网站。 我想使用 cmake 来构建项目。在 Linux 上一切正常,但在 Windows 上我看到以下链接错误

MSVCRTD.lib(exe_main.obj) : error LNK2019: unresolved external symbol main referenced in function "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ)

看起来链接器出于某种原因正在寻找 ma​​in 函数(它不应该寻找 WinMain 吗?) 示例代码有 wxIMPLMENT_APP(MyApp); 宏,我还设置了链接器选项 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}/subsystem:windows"),但没有任何帮助,所以我不明白问题是什么。我有一种感觉,我错过了一些简单的事情。也许您之前的某个项目也遇到过类似的问题?感谢您的帮助。

下面给出了我的 CMakeLists.txt 文件

cmake_minimum_required (VERSION 3.8)

project ("project")

set(CMAKE_CXX_STANDARD 17)
set(WXWIN "C:/msys64/wxWidgets")


# =========================================================================
set(BUILD_DEPS ON)
list(APPEND CMAKE_MODULE_PATH "include/libs")

include_directories("include/libs")
add_subdirectory("include/libs/glog")

if (MSVC)
set(wxWidgets_ROOT_DIR ${WXWIN})
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /subsystem:windows")
endif (MSVC)

find_package(wxWidgets COMPONENTS net gl core base)
include(${wxWidgets_USE_FILE})
set(wxWidgets_USE_UNICODE ON)

# Create shared library for the project
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
set(PROJECT_LINK_LIBS Tools)
set(LIBRARY_SRC include/Tools.cpp)
add_library(Tools SHARED ${LIBRARY_SRC})
link_directories("out/build")
set_target_properties(Tools PROPERTIES POSITION_INDEPENDENT_CODE 1)
# =========================================================================

# Add source to this project's executable.
add_executable (project "project.cpp" "project.h")
target_compile_features(project PUBLIC cxx_std_17)
target_link_libraries (project ${PROJECT_LINK_LIBS} ${wxWidgets_LIBRARIES})

最佳答案

事实证明,要使其工作,需要将 WIN32 放入 cmake 的 add_executable 命令中 add_executable(项目“project.cpp”“project.h”) => add_executable(项目WIN32“project.cpp”“project.h”)

关于使用 wxWidgets 的项目的 cmake 链接器配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62015155/

相关文章:

cmake ctest 测试后删除文件

c++ - Qt、cmake 和 qhelpgenerator

c++ - 如何简化此 cmake 文件?

docker - 如何使cmake仅为docker构建可执行文件?

C编译器可以在运行时消除这个条件测试吗?

c# - 开发人员笔记本配置

spring - 从属性文件中自动刷新 spring bean 属性

c++ - 对某些 OpenGL 函数的 undefined reference (如果它们尚未在 main 中调用)

c++ - gcc 的 protobuf 编译问题

gcc - g++ 链接时找不到符号