2016-08-03 18 views
0

Ich versuche ein Projekt mit SFML und SFGUI zu erstellen. Das Projekt baut sich auf, bis ich versuche, sfg :: SFGUI zu instanziieren. Wenn ich versuche, erhalte ich folgende Fehlermeldung:ld: Symbol (e) nicht für Architektur gefunden x86_64 (CMake SFGUI)

/Applications/CLion.app/Contents/bin/cmake/bin/cmake -E cmake_link_script CMakeFiles/tilemap.dir/link.txt --verbose=1 
/usr/bin/clang++ -std=c++11 -stdlib=libc++ -g -Wl,-search_paths_first -Wl,-headerpad_max_install_names CMakeFiles/tilemap.dir/src/main.cpp.o CMakeFiles/tilemap.dir/src/Camera.cpp.o CMakeFiles/tilemap.dir/src/Player.cpp.o CMakeFiles/tilemap.dir/src/Tile.cpp.o CMakeFiles/tilemap.dir/src/TileMap.cpp.o -o tilemap /usr/local/lib/libsfml-system.dylib /usr/local/lib/libsfml-window.dylib /usr/local/lib/libsfml-graphics.dylib /usr/local/lib/libsfml-network.dylib /usr/local/lib/libsfml-audio.dylib 
Undefined symbols for architecture x86_64: 
    "sfg::SFGUI::SFGUI()", referenced from: 
     MyInterface::MyInterface() in main.cpp.o 
    "sfg::SFGUI::~SFGUI()", referenced from: 
     MyInterface::~MyInterface() in main.cpp.o 
ld: symbol(s) not found for architecture x86_64 

Hier ist meine „MyInterface.h“:

#include <iostream> 
#include <stdlib.h> 
#include <SFGUI/SFGUI.hpp> 
#include <SFGUI/Widgets.hpp> 
#include <SFML/Graphics.hpp> 

class MyInterface { 
public: 
    void RunInterface(); 
    void ButtonClick(); 

private: 
    sfg::SFGUI mysfgui; 
    // sfg::Window::Ptr m_window; 
    // sfg::Button::Ptr m_button; 
}; 

void MyInterface::RunInterface() { 
    printf("Interface running!\n"); 
    // m_window = sfg::Window::Create(); 
    // auto box = sfg::Box::Create(sfg::Box::Orientation::VERTICAL, 5.f); 
    // m_button = sfg::Button::Create("Click me"); 
    // box->Pack(m_button); 
    // m_button->GetSignal(sfg::Widget::OnLeftClick).Connect(std::bind(&MyInterface::ButtonClick, this)); 
} 

void MyInterface::ButtonClick() { 
    // m_button->SetLabel("I was clicked"); 
} 

Wie Sie habe ich sehen kann alles aus außer dem SFGUI Instanziierung kommentiert. Hier

ist, was meine CMake-Datei wie folgt aussieht:

cmake -DCMAKE_CXX_FLAGS="-stdlib=libc++" -DCMAKE_C_COMPILER="/usr/bin/clang" -DCMAKE_CXX_COMPILER="/usr/bin/clang++" -DCMAKE_OSX_ARCHITECTURES="i386;x86_64" 

und SFGUI:

cmake -DCMAKE_CXX_FLAGS="-stdlib=libc++" -DCMAKE_C_COMPILER="/usr/bin/clang" -DCMAKE_CXX_COMPILER="/usr/bin/clang++" -DSFGUI_BUILD_EXAMPLES="false" -DSFGUI_BUILD_DOC="false" -DCMAKE_OSX_ARCHITECTURES="i386;x86_64" 

Was bin

cmake_minimum_required(VERSION 3.5) 
# Project Specific stuff 
set(SOURCE_FILES src/main.cpp src/Camera.cpp src/Player.cpp src/Tile.cpp src/TileMap.cpp src/MyInterface.h) 
set(PROJECT_NAME myproject) 
add_executable(${PROJECT_NAME} ${SOURCE_FILES}) 
message("Building ${PROJECT_NAME}...") 
project(${PROJECT_NAME}) 

# CMake Options 
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake_modules") 
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/bin") 
if (APPLE) 
    message("Found Apple Machine!") 
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") 
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -stdlib=libc++") 
    set(CMAKE_CXX_COMPILER "/usr/bin/clang++") 
    set(CMAKE_C_COMPILER "/usr/bin/clang") 
endif (APPLE) 

# SFML Stuff 
find_package(SFML REQUIRED system window graphics network audio) 
if (SFML_FOUND) 
    message("Found SFML...") 
    include_directories(${SFML_INCLUDE_DIR} ${SFML_INCLUDE_DIRS}) # Do I need dir and dirs? 
    target_link_libraries(${PROJECT_NAME} ${SFML_LIBRARIES} ${SFML_DEPENDENCIES}) 
else() 
    message(FATAL_ERROR "Could not locate SFML!") 
endif (SFML_FOUND) 

# SFGUI Stuff 
find_package(SFGUI REQUIRED window button widget) 
if (SFGUI_FOUND) 
    message("Found SFGUI...") 
    include_directories(${SFGUI_INCLUDE_DIR} ${SFGUI_INCLUDE_DIRS}) # Do I need dir and dirs? 
    target_link_libraries(${PROJECT_NAME} ${SFGUI_LIBRARIES} ${SFGUI_DEPENDENCIES}) 
else() 
    message(FATAL_ERROR "Could not locate SFGUI!") 
endif (SFGUI_FOUND) 

Schließlich ich SFML mit den folgenden Optionen kompiliert haben Ich mache falsch? Jede Hilfe wird geschätzt.

+0

Sieht aus wie Sie vergessen, die Bibliothek tatsächlich zu verbinden .. aber ich bin kein CMake-Experte, also kann ich Ihnen nicht sagen, warum. Wie sieht die Linker-Befehlszeile aus? –

+0

Würde dies nicht die SFGUI-Bibliothek verlinken? target_link_libraries ($ {PROJECT_NAME} $ {SFGUI_LIBRARIES} $ {SFGUI_DEPENDENCIES}) – almyz125

+0

Sieht vernünftig aus. Aber wie gesagt, "kein CMake-Experte" - wie sieht die * tatsächliche * finale Linker-Kommandozeile aus? –

Antwort

-1

Danke für die Hilfe Jungs, ich denke, ich habe herausgefunden, was los war. Obwohl ich weiß nicht, warum das funktioniert ...

I geändert:

target_link_libraries(${PROJECT_NAME} ${SFGUI_LIBRARIES} ${SFGUI_DEPENDENCIES}) 

zu:

target_link_libraries(${PROJECT_NAME} -lsfgui) 

Ich hoffe, das hilft jemand auf der ganzen Linie.

+1

Das ist nicht, wie Sie CMAKE verwenden sollten. Suche immer nach den Bibliotheken und gib sie weiter. – usr1234567

+0

Ich stimme zu, es ist eine schlechte Lösung, aber am Ende des Tages hat es funktioniert. – almyz125

Verwandte Themen