#c #visual-studio #cmake #linker-errors #clion
#c #visual-studio #cmake #компоновщик-ошибки #clion
Вопрос:
Итак, у меня нет кода, только пустые файлы и CMake, но я продолжаю получать эту ошибку компоновщика. Может кто-нибудь, пожалуйста, подробно объяснить, в чем моя проблема? Некоторая информация, которую я имею, заключается в том, что я должен использовать Visual Studio 2015 в качестве своего компилятора и прочее, что, я думаю, я уже настроил.
Ошибка:
[100%] Linking CXX executable DebugCinderGameCinderGame.exe
NMAKE : fatal error U1077: '"C:Program FilesJetBrainsCLion 2020.2.3bincmakewinbincmake.exe"' : return code '0xffffffff'
Stop.
NMAKE : fatal error U1077: '"C:Program Files (x86)Microsoft Visual Studio 14.0VCBINnmake.exe"' : return code '0x2'
Stop.
NMAKE : fatal error U1077: '"C:Program Files (x86)Microsoft Visual Studio 14.0VCBINnmake.exe"' : return code '0x2'
Stop.
NMAKE : fatal error U1077: '"C:Program Files (x86)Microsoft Visual Studio 14.0VCBINnmake.exe"' : return code '0x2'
Stop.
LINK Pass 1: command "C:PROGRA~2MICROS~1.0VCbinlink.exe /nologo @CMakeFilesCinderGame.dirobjects1.rsp /out:DebugCinderGameCinderGame.exe /implib:CinderGame.lib /pdb:C:UserscesarDocumentsGitHubfinal-project-cesarmonsaludcmake-build-debugDebugCinderGameCinderGame.pdb /version:0.0 /machine:X86 /debug /INCREMENTAL /subsystem:windows /NODEFAULTLIB:LIBCMT /NODEFAULTLIB:LIBCPMT -LIBPATH:C:UserscesarDesktopcinder_0.9.2_vc2015libmswx86 C:UserscesarDesktopcinder_0.9.2_vc2015libmswx86Debugv140cinder.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /MANIFEST /MANIFESTFILE:CMakeFilesCinderGame.dir/intermediate.manifest CMakeFilesCinderGame.dir/manifest.res" failed (exit code 1120) with the following output:
LIBCMTD.lib(exe_winmain.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ)
DebugCinderGameCinderGame.exe : fatal error LNK1120: 1 unresolved externals
Код:
cmake_minimum_required(VERSION 3.12 FATAL_ERROR)
set(CMAKE_CXX_STANDARD 11)
project(Connect4)
# This tells the compiler to not aggressively optimize and
# to include debugging information so that the debugger
# can properly read what's going on.
set(CMAKE_BUILD_TYPE Debug)
# Let's ensure -std=c xx instead of -std=g xx
set(CMAKE_CXX_EXTENSIONS OFF)
# Let's nicely support folders in IDE's
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
# Warning flags
if(MSVC)
# warning level 3 and all warnings as errors
add_compile_options(/W3)
else()
# lots of warnings and all warnings as errors
add_compile_options(-Wall -Wpedantic -Werror)
endif()
# FetchContent added in CMake 3.11, downloads during the configure step
include(FetchContent)
# FetchContent_MakeAvailable was not added until CMake 3.14
if(${CMAKE_VERSION} VERSION_LESS 3.14)
include(cmake/add_FetchContent_MakeAvailable.cmake)
endif()
FetchContent_Declare(
catch2
GIT_REPOSITORY https://github.com/catchorg/Catch2.git
GIT_TAG devel
)
# Adds Catch2 testing library
FetchContent_GetProperties(catch2)
if(NOT catch2_POPULATED)
FetchContent_Populate(catch2)
add_library(catch2 INTERFACE )
target_include_directories(catch2 INTERFACE ${catch2_SOURCE_DIR}/single_include)
endif()
get_filename_component(CINDER_PATH "C:/Users/cesar/Desktop/cinder_0.9.2_vc2015" ABSOLUTE)
get_filename_component(APP_PATH "${CMAKE_CURRENT_SOURCE_DIR}/" ABSOLUTE)
include("${CINDER_PATH}/proj/cmake/modules/cinderMakeApp.cmake")
list(APPEND CORE_SOURCE_FILES
)
list(APPEND SOURCE_FILES ${CORE_SOURCE_FILES}
include/core/Connect4.h
include/visualizer/FinalProjectApp.h
src/core/Connect4.cpp
src/visualizer/FinalProjectApp.cpp
)
list(APPEND TEST_FILES tests/Connect4Tests.cpp)
ci_make_app(
APP_NAME CinderGame
CINDER_PATH ${CINDER_PATH}
SOURCES apps/cinder_game.cpp ${SOURCE_FILES}
INCLUDES include
)
ci_make_app(
APP_NAME ConsoleGame
CINDER_PATH ${CINDER_PATH}
SOURCES apps/main_console_game.cpp ${SOURCE_FILES}
INCLUDES include
)
ci_make_app(
APP_NAME GameTest
CINDER_PATH ${CINDER_PATH}
SOURCES tests/Connect4Tests.cpp ${SOURCE_FILES} ${TEST_FILES}
INCLUDES include
LIBRARIES catch2
)
if(MSVC)
set_property(TARGET GameTest APPEND_STRING PROPERTY LINK_FLAGS " /SUBSYSTEM:CONSOLE")
endif()
Комментарии:
1. Вы действительно пытаетесь скомпилировать полностью пустые файлы? Потому что вам нужна
main
функция для создания рабочей программы.2. Компоновщик ищет вызываемую функцию
WinMain
. Это отправная точка для программы с графическим интерфейсом Windows. Вы пытаетесь создать программу с графическим интерфейсом Windows? Как вы думаете, у вас есть функция, вызываемаяWinMain
в вашем коде?3. Вам нужно добавить
set_target_properties(CinderGame PROPERTIES WIN32_EXECUTABLE TRUE)
, чтобы убедиться, что CMake устанавливает правильную точку входа для компоновщика.