编译SFML时要链接的“静态库”的顺序是什么?

时间:2017-12-14 14:54:25

标签: c++ static-libraries sfml

我是SFML库的新手。我正在尝试编译一个示例程序。

我从SFML官方文档中获得了以下示例代码:

elementViewController

我尝试使用以下命令编译它:

#include <SFML/Audio.hpp>
#include <SFML/Graphics.hpp>

int main()
{
    // Create the main window
    sf::RenderWindow window(sf::VideoMode(800, 600), "SFML window");
    // Load a sprite to display
    sf::Texture texture;
    if (!texture.loadFromFile("cute_image.jpg"))
        return EXIT_FAILURE;
    sf::Sprite sprite(texture);
    // Create a graphical text to display
    sf::Font font;
    if (!font.loadFromFile("arial.ttf"))
        return EXIT_FAILURE;
    sf::Text text("Hello SFML", font, 50);
    // Load a music to play
    sf::Music music;
    if (!music.openFromFile("nice_music.ogg"))
        return EXIT_FAILURE;
    // Play the music
    music.play();
    // Start the game loop
    while (window.isOpen())
    {
        // Process events
        sf::Event event;
        while (window.pollEvent(event))
        {
            // Close window: exit
            if (event.type == sf::Event::Closed)
                window.close();
        }
        // Clear screen
        window.clear();
        // Draw the sprite
        window.draw(sprite);
        // Draw the string
        window.draw(text);
        // Update the window
        window.display();
    }
    return EXIT_SUCCESS;
}

但我收到了这些链接器错误(路径缩短):

g++.exe code.cpp -s -lsfml-main -lsfml-audio-s -lflac \
    -lvorbisenc -lvorbisfile -lvorbis -logg -lsfml-network-s \
    -lws2_32 -lsfml-graphics-s -lfreetype -lglew32 -ljpeg \
    -lsfml-window-s -lopengl32 -lgdi32 -lsfml-system-s -lwinmm \
    -lgdi32 -luser32 -lkernel32 -lcomctl32 -lmingw32 \
    -luser32 -lgdi32 -ldxguid -mwindows \
    -std=c++11  -o code.exe

我认为这是由于编译命令中静态库的顺序不正确。链接静态SFML库的正确顺序是什么?

1 个答案:

答案 0 :(得分:3)

您的图书馆订单很好(只需快速浏览一下)。你只是忘了链接OpenAL(在Windows下这将是-lOpenAL32),这是值得关注的,因为所有未定义的引用都以_imp__al开头。完成后,所有内容都应按预期链接并运行。