【问题标题】:Errors with SFML on Netbeans C++ projectNetbeans C++ 项目上的 SFML 错误
【发布时间】:2020-01-29 22:11:41
【问题描述】:

我正在使用 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 并包含文件夹后,现在我得到: “加载共享库时出错:?:无法打开共享对象文件:没有这样的文件或目录”

【问题讨论】:

  • 我将 [...] SFML/lib 添加到链接器 究竟如何?因为链接器似乎没有链接所有必要的库。你忘了OpenGL吗?对于 sfml,一些平台需要额外且明确的。发生在我身上一次。
  • 您使用的SFML 是用mingw 构建的吗?我认为您不能使用 Visual Studio 二进制文件。
  • @drescherjm 也许。我应该使用哪一个?
  • @nada 项目设置 -> 链接器 -> 附加库目录并选择 SFML/lib 文件夹。我对 OpenGL 什么都没做,我该怎么办?
  • @drescherjm 对,编辑后指向代码块/mingw 教程。

标签: c++ windows netbeans sfml


【解决方案1】:

你必须告诉 NetBeans 三件事:

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

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

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

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

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

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

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

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

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

【讨论】:

  • 这正是我所做的,但我总是得到那个错误
  • 你的意思是链接错误main.cpp:31: undefined reference to ...
  • 不,抱歉。我的意思是我得到这个错误:“加载共享库时出错:?:无法打开共享对象文件:没有这样的文件或目录”
  • 您的系统路径中有 SFML bin 目录吗?您需要管理员权限才能更改它
  • 我的 PATH 环境变量中有 bin 目录。我不确定登录后的访问权限。什么意思?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-09
  • 2011-06-21
  • 2018-04-08
  • 2017-10-24
相关资源
最近更新 更多