当前位置: 首页 > 知识库问答 >
问题:

SFML 2.4.2适用于Visual C 2017,使用2015版SFML

阙新觉
2023-03-14

所以我正在尝试编写一些与网络相关的代码,特别是使用SFML的端口扫描仪。我正在运行VS 2017,并且已经下载了2015年的SFML版本,但是人们说这应该适用于2017年。

到目前为止,我尝试查看库是否正常工作的演示代码是:

#include <iostream>
#include <SFML/Network.hpp>
#include <string>

using namespace std;

bool port_is_open(const string& address, int port) {
    sf::TcpSocket socket;
    bool open = (socket.connect(sf::IpAddress(address), port) == sf::Socket::Done);
    socket.disconnect();
    return open;
}

int main() {
    cout << "Enter IP number: ";
    string address;
    cin >> address;

    cout << "Enter Port number: ";
    int port;
    cin >> port;

    if (port_is_open(address, port)) {
        cout << "Port " << port << ": OPEN" << endl;
    }
    else {
        cout << "Port " << port << ": CLOSED" << endl;
    }


    return 0;
}

但如果这有效,我就不会在这里。

严重性代码描述项目文件行抑制状态错误LNK2019未解析外部符号“public:virtual_ thiscall sf::Socket::~Socket(void)”(?)??1Socket@sf@@UAE@XZ)在函数“public:virtual__thiscall sf::TcpSocket::~TcpSocket(void)”中引用(??1TcpSocket@sf@@UAE@XZ)PortScannerWin32 c:\Users\James\documents\visual studio 2017\Projects\PortScanner Win32\PortScarnerWin32\PortScanner。obj 1

错误 LNK2019 未解析的外部符号“public: __thiscall sf::TcpSocket::TcpSocket(void)” (??0TcpSocket@sf@@QAE@XZ) 在函数 “bool __cdecl port_is_open(class std::basic_string,class std::allocator) 中引用

错误LNK2019未解析的外部符号"public: enum sf::Socket::status__thiscallsf::TcpSocket::connect(class sf::IpAddress const

错误 LNK2019 未解析的外部符号“public: void __thiscall sf::TcpSocket::d isconnect(void)” (?disconnect@TcpSocket@sf@@QAEXXZ) 在函数 “bool __cdecl port_is_open(class std::basic_string,class std::allocator) 中引用

错误 LNK2019 未解析的外部符号“公共: __thiscall sf::IpAddress::IpAddress(class std::basic_string,class std::assignor

错误LNK2001未解析的外部符号“public:static class SF::Time const SF::Time::Zero”(?zero @ Time @ SF @ @ 2v 12 @ B)PortScannerWin32 c:\ Users \ James \ documents \ visual studio 2017 \ Projects \ PortScannerWin32 \ PortScannerWin32 \ portscanner . obj 1 < br >警告LNK4272库计算机类型“x64”与目标计算机类型“X86”PortScannerWin32 D:\ SFML-2 . 4 . 2 \ lib \ sfml-network-D . lib 1

错误LNK1120 6未解决的外部PortScannerWin32 c:\user\james\Document\Visual Studio 2017\Projects\PortScannerWin32\Debug\PortScannerWin32.exe1

这些都是我的错误,如果我是诚实的,我真的一点线索都没有。我已经逐字阅读了教程,并输入了依赖项等。

有人知道出了什么问题吗?我想说显而易见的答案是2015年在VS 2017中使用,但很多论坛都说它可以正常工作,因为SFML 2015中有一个更新允许这样做。

共有2个答案

岑鸣
2023-03-14

您没有链接到正确的库平台。

警告LNK4272库机器类型'x64'与目标机器类型'X86'PortScannerWin32 D:\SFML-2.4.2\lib\sfml-network-d.lib1冲突

这表示您正在链接 64 位库,而您的项目处于 32 位。确保采用正确的库,或更新项目以将其构建为 64 位项目。

伍玮
2023-03-14

我对这个库一无所知,但这些似乎是非常标准的链接器错误。将VS 2017(平台工具集v141)与使用VS 2015编译的库(Plaform Toolset v141)链接起来应该没有问题。微软在VS 2015和2017中的编译器之间保持了二进制兼容性,这允许将编译的代码混合在同一个可执行文件中。

您使用的头文件包括(SFML/Network.hpp)“promises”实现。链接器的工作是将“promise”与静态库(.lib)中包含的实际实现相匹配,并将它们组合在一起创建您的exe。

请注意最后一个警告:

Warning LNK4272 library machine type 'x64' conflicts with target machine type 'X86' PortScannerWin32 D:\SFML-2.4.2\lib\sfml-network-d.lib 1

首先,我会将Visual Studio中项目的平台值更改为x64,这样库的“位”就与可执行文件的“位”相匹配。这是本机代码,因此生成的代码必须用于相同的架构。

请注意,更改此选项时,可能需要设置项目属性,如包含路径和库路径,以及链接器输入,以便代码能够编译。您可以使用项目属性表将x64值设置为x86平台中的值。

 类似资料:
  • 我有两个版本的oracle,oracle Database 11g Enterprise Edition 11.2.0.1.0版本-生产版和oracle Database 11.g Enterprise Edition版本11.2-0.3.0版本-64位生产版 我有这个sql: 它适用于11.2.0.1.0,但在11.2.0.3.0上,我收到此错误: 我能做些什么来解决这个问题? 感谢。

  • 我的谷歌登录非常适合调试变体。但是当我尝试构建发布变体时,它停止工作......我提到了这个答案,但就我而言,我还没有上传到我的应用程序到Play商店。那么在这种情况下,我如何获得新的 sha1 密钥呢?

  • 问题内容: 有序词典是非常有用的结构,但是不幸的是,它们仅在3.1和2.7版本中才是最近的版本。在旧版本中如何使用有序词典? 问题答案: 我在pip python 2.6上安装了ordereddict

  • Navicat Data Modeler 为视觉化地创建视图提供了一个有用的工具,称为“视图创建工具”。它让你不需要 SQL 知识就能创建和编辑视图。即使你熟悉 SQL,便捷而流畅的图形界面也可以让你更轻松地创建关系并可视化视图。 在视图设计器中,点击 钮来打开可视化的视图创建工具。 所有数据库对象都显示在左侧的“对象”窗格中。在中间的窗格中,它分为两部分:上面的“图表”窗格和下面的“准则”窗格。

  • Navicat Data Modeler 为视觉化地创建视图提供了一个有用的工具,称为“视图创建工具”。它让你不需要 SQL 知识就能创建和编辑视图。即使你熟悉 SQL,便捷而流畅的图形界面也可以让你更轻松地创建关系并可视化视图。 在视图设计器中,点击 “视图创建工具”按钮来打开可视化的视图创建工具。 所有数据库对象都显示在左侧的“对象”窗格中。在中间的窗格中,它分为两部分:上面的“图表”窗格和下

  • Navicat 提供两款代码调试器:“Oracle PL/SQL 调试器”和“PostgreSQL PL/pgSQL 调试器”。使用调试器,你可以切换断点,获取调用堆栈,查看变量值,追踪代码等。