collect2.exe:错误:ld 返回 1 退出状态

问题描述 投票:0回答:1

有一个带有 SFML 的简单 C++ 脚本。当我尝试编译它时,编译器出现一些错误。 请注意,代码编辑器中不会显示与脚本相关的错误。

脚本:

#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");
    sf::CircleShape shape(100.f);
    shape.setFillColor(sf::Color::Green);

    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }

        window.clear();
        window.draw(shape);
        window.display();
    }

    return 0;
}

命令:

$ g++ -c src\main.cpp -I"C:\librairies\SFML-2.6.1\include"
$ g++ main.o -o sfml-app -L"C:\librairies\SFML-2.6.1\lib" -lsfml-graphics -lsfml-window -lsfml-system

当我运行第一个命令时,我没有收到任何错误,一切顺利。但是当我运行第二个时,出现这个错误:

C:/Program Files/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/librairies/SFML-2.6.1/lib/libsfml-graphics.a when searching for -lsfml-graphics
[...]
C:/Program Files/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/librairies/SFML-2.6.1/lib/libsfml-system.a when searching for -lsfml-system
collect2.exe: error: ld returned 1 exit status

我已经尝试更改SFML的目录,但问题仍然出现。

c++ compiler-errors g++ sfml ld
1个回答
0
投票

您下载了与您的编译器不兼容的 SFML 不兼容的二进制文件,在 Windows 上您可以轻松地从源代码编译 SFML,因为它没有依赖项,使用与构建项目相同的编译器编译 SFML 将避免此问题,步骤如下。

  1. 从 SFML 网站下载源代码
  2. 下载并安装 CMake 应用程序
  3. 确保
    g++
    cmake
    都在您的
    PATH
    环境变量中(通常是安装过程中的复选框),您可以通过在 cmd 中键入
    g++ --version
    cmake --version
    进行验证。
  4. 按照从源代码编译cmake基本上打开下载文件夹,然后打开
    cmd
    并输入
mkdir build
cd build
cmake .. -G"MinGW Makefiles"
cmake --build .

与您的编译器兼容的新二进制文件现在应该位于您可以在项目中使用的

build/libs
文件夹中。

© www.soinside.com 2019 - 2024. All rights reserved.