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.
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? –
Würde dies nicht die SFGUI-Bibliothek verlinken? target_link_libraries ($ {PROJECT_NAME} $ {SFGUI_LIBRARIES} $ {SFGUI_DEPENDENCIES}) – almyz125
Sieht vernünftig aus. Aber wie gesagt, "kein CMake-Experte" - wie sieht die * tatsächliche * finale Linker-Kommandozeile aus? –