Конфигурация компоновщика cmake для проекта, использующего wxWidgets - PullRequest
1 голос
/ 26 мая 2020

У меня следующая проблема. Я хочу создать кроссплатформенное приложение GUI, которое использует wxWidgets. Я пытаюсь скомпилировать и запустить пример Hello World с веб-сайта 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)

Похоже, компоновщик почему-то ищет функцию main (не следует Он не ищет WinMain ?) В примере кода есть макрос wxIMPLEMENT_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})

1 Ответ

1 голос
/ 26 мая 2020

Получается, что для его работы необходимо поместить WIN32 в команду add_executable cmake add_executable (project "project.cpp" "project.h") => add_executable (project WIN32 "project.cpp" "project.h")

...