2011-12-17 42 views
5

Điều này có vẻ giống như câu hỏi 'noob': Tôi đã tải xuống SFML-1.6 cho Mac và tôi đã đặt các khung vào thư mục/Library/Frameworks của mình. Sau khi cố gắng biên dịch một ứng dụng SFML ví dụ, tôi nhận được các lỗi liên kết cho mọi cuộc gọi tôi thực hiện với SFML. Tôi không chắc chắn những gì tôi đang mất tích? Tôi đã không có nhiều kinh nghiệm với OSX và Frameworks vì vậy có lẽ tôi cần phải liên kết đến các thư viện bằng một số phương pháp khác?Lỗi liên kết trên OS X

Output, nếu nó giúp:

Undefined symbols for architecture x86_64: 
    "sf::VideoMode::VideoMode(unsigned int, unsigned int, unsigned int)", referenced from: 
     osx_init::init() in osx_init.o 
    "sf::RenderWindow::RenderWindow(sf::VideoMode, std::string const&, unsigned long, sf::WindowSettings const&)", referenced from: 
     osx_init::init() in osx_init.o 
    "sf::RenderTarget::PreserveOpenGLStates(bool)", referenced from: 
     osx_init::init() in osx_init.o 
    "sf::Image::Image()", referenced from: 
     osx_init::init() in osx_init.o 
    "sf::Image::LoadFromFile(std::string const&)", referenced from: 
     osx_init::init() in osx_init.o 
    "sf::Color::Color(unsigned char, unsigned char, unsigned char, unsigned char)", referenced from: 
     osx_init::init() in osx_init.o 
    "sf::Sprite::Sprite(sf::Image const&, sf::Vector2<float> const&, sf::Vector2<float> const&, float, sf::Color const&)", referenced from: 
     osx_init::init() in osx_init.o 
    "sf::Image::GetWidth() const", referenced from: 
     osx_init::init() in osx_init.o 
    "sf::Image::GetHeight() const", referenced from: 
     osx_init::init() in osx_init.o 
    "sf::Image::GetPixelsPtr() const", referenced from: 
     osx_init::init() in osx_init.o 
    "sf::Image::~Image()", referenced from: 
     osx_init::init() in osx_init.o 
    "sf::Clock::Clock()", referenced from: 
     osx_init::init() in osx_init.o 
    "sf::Window::IsOpened() const", referenced from: 
     osx_init::init() in osx_init.o 
    "sf::Window::GetEvent(sf::Event&)", referenced from: 
     osx_init::init() in osx_init.o 
    "sf::Window::Close()", referenced from: 
     osx_init::init() in osx_init.o 
    "sf::Clock::GetElapsedTime() const", referenced from: 
     osx_init::init() in osx_init.o 
    "sf::Unicode::Text::Text(char const*)", referenced from: 
     osx_init::init() in osx_init.o 
    "sf::Font::GetDefaultFont()", referenced from: 
     osx_init::init() in osx_init.o 
    "sf::String::String(sf::Unicode::Text const&, sf::Font const&, float)", referenced from: 
     osx_init::init() in osx_init.o 
    "sf::Drawable::SetPosition(float, float)", referenced from: 
     osx_init::init() in osx_init.o 
    "sf::Drawable::SetColor(sf::Color const&)", referenced from: 
     osx_init::init() in osx_init.o 
    "sf::Window::Display()", referenced from: 
     osx_init::init() in osx_init.o 
    "sf::RenderWindow::~RenderWindow()", referenced from: 
     osx_init::init() in osx_init.o 
    "vtable for sf::Sprite", referenced from: 
     sf::Sprite::~Sprite() in osx_init.o 
    "sf::Drawable::~Drawable()", referenced from: 
     sf::Sprite::~Sprite() in osx_init.o 
     sf::String::~String() in osx_init.o 
    "vtable for sf::String", referenced from: 
     sf::String::~String() in osx_init.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

Trả lời

2

Có vẻ như vấn đề của bạn cũng có thể được trả lời từ một nhà phát triển có kinh nghiệm trên OS X nhưng vì nó là một câu hỏi liên quan SFML quá, tôi muốn khuyên bạn để liên lạc với nhà phát triển (hoặc ít nhất anh ta đã chuyển toàn bộ điều) của SFML cho OS X: hirua. (Hay anh ta cũng ở đây trên Stackoverflow?)

Ngoài ra còn có instruction để xây dựng (và sử dụng) thư viện SFML 2.0 trong diễn đàn. Có lẽ nó cũng giúp cho phiên bản 1.6 của bạn.

(Tôi muốn thêm này chỉ là một bình luận nhưng có vẻ như danh tiếng của tôi không phải là những gì tuyệt vời (chưa))

6

Bạn sẽ cần phải thêm hai lá cờ để các tùy chọn Linker:

-framework SFML 

này cho mối liên kết để sử dụng khung làm việc trong /Library/Frameworks/SFML.framework

Bên cạnh đó, bạn phải bao gồm -lsfml-whatever cho mỗi thư viện bạn đang sử dụng:

-lsfml-system 
-lsfml-window 
-lsfml-graphics 
-lsfml-audio 
-lsfml-network 

Vì vậy, một dòng liên kết hoàn toàn có thể trông giống như:

g++ -framework SFML -lsfml-graphics -lsfml-audio -lsfml-window -lsfml-system 

Đây không phải là ngay lập tức rõ ràng từ Mac OSX SFML xây dựng tài liệu, nhưng bạn cần cả hai.

+0

Không, '-framework SFML' là vô ích. Đó là một khuôn khổ giả chỉ chứa các tiêu đề. Nếu bạn đã cài đặt dylibs, bạn có thể cũng đã cài đặt các tiêu đề trong '/ usr/local /', do đó bạn không cần khung công tác phụ này. – Hiura