Неопределенные символы для архитектуры x86_64: Graphics::Graphics(), на которые ссылается: _main в main.cpp.o

Я не могу собрать свой проект в CLion после создания класса graphics.h и его реализации main.cpp, я пытался изменить свой CMakeLists.txt 6 способами с воскресенья. Может ли кто-нибудь помочь мне и дать мне второй взгляд на то, что мне не хватает? Я пробовал stackoverflow и везде. Я установил свои пакеты SDL с помощью brew и создал указатель в ~bash.profile, где находятся все мои библиотеки.

main.cpp

/* Main.cpp
 * The entry point of the program
 * */
#include "graphics.h"

int main(int argc, const char* argv[]) {
    Graphics graphics;
    while(true) {

    }

    return 0;
}

редактировать: Graphics.cpp

#include <SDL2/SDL.h>
#include "graphics.h"

/* Graphics class
 * Holds all information dealing with graphics for the game
 */

Graphics::Graphics() {
    SDL_CreateWindowAndRenderer(640, 480, 0, &this->_window, &this->_renderer);
    SDL_SetWindowTitle(this->_window, "CaveStory");
}

Graphics::~Graphics() {
    SDL_DestroyWindow(this->_window);
}

~bash.profile

export PATH="/usr/local/sbin:$PATH"
export C_INCLUDE_PATH=/usr/include:/usr/local/include
export CPLUS_INCLUDE_PATH=/usr/include:/usr/local/include

CMakeLists.Txt —

cmake_minimum_required(VERSION 3.3)
project(cavestory_development)

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${cavestory_development}/cmake")

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -v -stdlib=libc++")

set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake")

set(SOURCE_FILES source/src/main.cpp)

include_directories(${cavestory_development})
include_directories("source/headers")
include_directories("/usr/bin/clang++")

find_package(PkgConfig REQUIRED)
pkg_search_module(SDL2 REQUIRED sdl2)

include_directories(${SDL2_INCLUDE_DIRS})
link_directories(${SDL2_LIBRARY_DIRS})

add_executable(cavestory_development ${SOURCE_FILES})

target_link_libraries(cavestory_development
       ${SDL2_LIBRARIES}
       ${SDL2_IMAGE_LIBRARIES}
       ${SDL2_TTF_LIBRARIES})

Вывод сборки из CLion —

/Applications/CLion.app/Contents/bin/cmake/bin/cmake --build      /Users/User/Library/Caches/CLion12/cmake/generated/791c20f4/791c20f4/Debug --   target cavestory_development -- -j 4
[ 50%] Linking CXX executable cavestory_development
Apple LLVM version 7.0.2 (clang-700.1.81)
Target: x86_64-apple-darwin15.3.0
Thread model: posix
 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" -demangle -dynamic -arch x86_64 -macosx_version_min 10.11.0 -syslibroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk -o cavestory_development -L/usr/local/lib -search_paths_first -headerpad_max_install_names CMakeFiles/cavestory_development.dir/source/src/main.cpp.o -lSDL2 -rpath /usr/local/lib -lc++ -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.0.2/lib/darwin/libclang_rt.osx.a
Undefined symbols for architecture x86_64:
  "Graphics::Graphics()", referenced from:
      _main in main.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see   invocation)
make[3]: *** [cavestory_development] Error 1
make[2]: *** [CMakeFiles/cavestory_development.dir/all] Error 2
make[1]: *** [CMakeFiles/cavestory_development.dir/rule] Error 2
make: *** [cavestory_development] Error 2

person cameracode    schedule 15.02.2016    source источник
comment
Действительно ли graphics.h включает graphics.h?   -  person Joachim Isaksson    schedule 15.02.2016
comment
файлы заголовков не имеют ничего общего с ошибками компоновщика. Вам нужно указать компоновщику использовать библиотеку с графикой. -L/path/to/library/dir -lnameoflib   -  person xaxxon    schedule 15.02.2016
comment
OP должен означать graphics.cpp.   -  person trojanfoe    schedule 15.02.2016
comment
Плохо, я имел в виду graphics.cpp   -  person cameracode    schedule 15.02.2016
comment
Я ничего не знаю о CMake, но разве это не должно включать graphics.cpp: set(SOURCE_FILES source/src/main.cpp)?   -  person trojanfoe    schedule 15.02.2016
comment
@xaxxon Нужно ли ссылаться на /source/headers/graphics.h в cmake?   -  person cameracode    schedule 15.02.2016
comment
Это может помочь - проверьте свой вывод --libs... stackoverflow.com/a/33239786/2836621   -  person Mark Setchell    schedule 15.02.2016
comment
Файлы заголовков @camerajunkie не имеют ничего общего с ошибками компоновщика. Вам нужно включить БИБЛИОТЕКУ. .o, .obj, .a, .dll, .dylib, .so... одна из этих вещей   -  person xaxxon    schedule 15.02.2016


Ответы (1)


Спасибо за всю помощь @xaxxon, а также спасибо за то, что помогли мне найти ответ!

Я все еще тестирую, какие из них избыточны, а какие нет, но, наконец, я получил проект для сборки со следующими модификациями.

CMakeLists.txt

cmake_minimum_required(VERSION 3.3)
project(cavestory_development)

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${cavestory_development}/cmake")

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -v -stdlib=libc++")

set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake ")

include_directories(${cavestory_development})
include_directories("/usr/bin/clang++")
include_directories(source/headers)

find_package(PkgConfig REQUIRED)
pkg_search_module(SDL2 REQUIRED sdl2)

include_directories(${SDL2_INCLUDE_DIRS})
link_directories(${SDL2_LIBRARY_DIRS})

set(SOURCE_FILES source/src/main.cpp source/src/graphics.cpp source/headers/graphics.h)
add_executable(cavestory_development ${SOURCE_FILES})

target_link_libraries(cavestory_development
        ${SDL2_LIBRARIES}
        ${SDL2_IMAGE_LIBRARIES}
        ${SDL2_TTF_LIBRARIES})

Большинство изменений произошли в set(SOURCE_FILES). Я не знал, что мне нужно было добавить graphics.cpp и graphics.h. Я также не понимал, что мой include_directories был неправильным. Еще раз спасибо всем за помощь!

person cameracode    schedule 15.02.2016