首页 > 解决方案 > Netbeans C++ 项目上的 SFML 错误

问题描述

我正在使用 Netbeans(在 Windows 上)开发 c++。我正试图让 SMFL 工作。

#include <iostream>
#include <cstdlib>
#include <time.h>
#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>

using namespace std;

/*
 * 
 */
int main(int argc, char** argv) 
{
    RenderWindow window(VideoMode(600, 800), "TITLE");
    cout << "Hello World!";

    return 0;
}

当我启动应用程序时,我收到以下错误。

main.cpp:31: undefined reference to `__imp__ZN2sf6StringC1EPKcRKSt6locale'
main.cpp:31: undefined reference to `__imp__ZN2sf9VideoModeC1Ejjj'
main.cpp:31: undefined reference to `__imp__ZN2sf12RenderWindowC1ENS_9VideoModeERKNS_6StringEjRKNS_15ContextSettingsE'
main.cpp:31: undefined reference to `__imp__ZN2sf12RenderWindowD1Ev'
main.cpp:31: undefined reference to `__imp__ZN2sf12RenderWindowD1Ev'

第 31 行是

RenderWindow window(VideoMode(600, 800), "TITLE");

我在 c++ 编译器中添加了 SFML/include 目录,在链接器中添加了 SFML/lib,你能帮帮我吗?

编辑:重试添加 lib 并包含文件夹后,现在我得到:“加载共享库时出错:?:无法打开共享对象文件:没有这样的文件或目录”

标签: c++windowsnetbeanssfml

解决方案


您必须告诉 NetBeans 三件事:

  • SFML 包含文件的目录
  • SFML 库目录
  • 要链接的 SFML 库列表

看起来您已经知道如何执行 #1,但我会重复所有内容以防万一。所有这些设置都应使用项目属性完成 - 右键单击​​您的项目名称,然后打开属性设置窗口。您需要在两个窗格中进行添加 - “C++ 编译器”和“链接器”。

“C++ 编译器”窗格是您首先需要的。找到“包含目录”行并单击带有三个点的正方形(目录选择器) - 然后添加 SFML“包含”目录。在我的情况下,此窗格如下:

C++ 编译器设置窗格

“链接器”窗格是下一个。找到“附加库目录”并添加 SFML“lib”目录 - 也使用目录选择器。然后找到“库”行并添加至少三个库 - “sfml-graphics”、“sfml-window”和“sfml-system”。为此,您需要使用稍微复杂的选择器,您需要的按钮是“添加库...” - 请参见此处的第三张图片。图书馆的顺序很重要。在我的情况下,此窗格如下:

链接器设置窗格

这是库选择器 - 使用“添加库...”按钮

库选择器

同样在您的示例中,您需要为 SFML 类型使用前缀“sf::”:

sf::RenderWindow window(sf::VideoMode(600, 800), "TITLE");

加法。看起来(来自评论)编译和链接问题已经解决,但是应用程序仍然找不到 SFML 动态库。此问题不在 NetBeans 范围内 - 您只需确保包含动态库的 SFML 目录已添加到 Windows 系统路径中。

这个目录名可以很长,所以添加到路径时很容易打错。有一个简单的方法来验证 - 一个 Windows 工具where.exe。某些 Windows 系统没有此工具 - 因此您可以通过path命令输出当前路径,然后将路径中与 SFML 相关的部分复制粘贴为 Unixls命令的参数(它在 MinGW MSYS 环境中)。通常ls会显示 SFML 动态库列表(带dll扩展名)。


推荐阅读