【问题标题】:Undefined symbols for architecture x86_64: "Graphics::Graphics()", referenced from: _main in main.cpp.o架构 x86_64 的未定义符号:“Graphics::Graphics()”,引用自:main.cpp.o 中的 _main
【发布时间】:2016-02-15 07:24:14
【问题描述】:

在创建类 graphics.h 并实现它 main.cpp 后,我无法让我的项目在 CLion 中构建,我从周日开始尝试以 6 种方式修改我的 CMakeLists.txt。谁能帮助我,让我重新审视我所缺少的东西?我已经尝试过 stackoverflow 和其他任何地方。我用 brew 安装了我的 SDL 包,并在 ~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

【问题讨论】:

  • graphics.h 真的包括graphics.h 吗?
  • 头文件与链接器错误无关。您需要告诉链接器使用其中包含图形的库.. -L/path/to/library/dir -lnameoflib
  • OP 必须表示graphics.cpp
  • 我对CMake一无所知,但这不应该包括graphics.cpp:set(SOURCE_FILES source/src/main.cpp)吗?
  • @camerajunkie 头文件与链接器错误无关。你需要包括图书馆。 .o、.obj、.a、.dll、.dylib、.so……其中之一

标签: c++ macos cmake clion


【解决方案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.cppgraphics.h强>。我也没有意识到我的 include_directories 不正确。再次感谢大家的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-05
    • 2017-02-06
    • 1970-01-01
    • 2016-11-12
    • 2018-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多