gpt4 book ai didi

c++ - SFML 2.4.2 for Visual C++ 2017 使用 SFML 的 2015 构建

转载 作者:太空宇宙 更新时间:2023-11-04 15:33:03 32 4
gpt4 key购买 nike

所以我正在尝试编写一些与网络相关的代码,特别是使用 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;
}

但如果这行得通,我就不会在这里了。

Severity Code Description Project File Line Suppression State Error LNK2019 unresolved external symbol "public: virtual __thiscall sf::Socket::~Socket(void)" (??1Socket@sf@@UAE@XZ) referenced in function "public: virtual __thiscall sf::TcpSocket::~TcpSocket(void)" (??1TcpSocket@sf@@UAE@XZ) PortScannerWin32 c:\Users\James\documents\visual studio 2017\Projects\PortScannerWin32\PortScannerWin32\PortScanner.obj 1

Error LNK2019 unresolved external symbol "public: __thiscall sf::TcpSocket::TcpSocket(void)" (??0TcpSocket@sf@@QAE@XZ) referenced in function "bool __cdecl port_is_open(class std::basic_string,class std::allocator > const &,int)" (?port_is_open@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z) PortScannerWin32 c:\Users\James\documents\visual studio 2017\Projects\PortScannerWin32\PortScannerWin32\PortScanner.obj 1

Error LNK2019 unresolved external symbol "public: enum sf::Socket::Status __thiscall sf::TcpSocket::connect(class sf::IpAddress const &,unsigned short,class sf::Time)" (?connect@TcpSocket@sf@@QAE?AW4Status@Socket@2@ABVIpAddress@2@GVTime@2@@Z) referenced in function "bool __cdecl port_is_open(class std::basic_string,class std::allocator > const &,int)" (?port_is_open@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z) PortScannerWin32 c:\Users\James\documents\visual studio 2017\Projects\PortScannerWin32\PortScannerWin32\PortScanner.obj 1

Error LNK2019 unresolved external symbol "public: void __thiscall sf::TcpSocket::disconnect(void)" (?disconnect@TcpSocket@sf@@QAEXXZ) referenced in function "bool __cdecl port_is_open(class std::basic_string,class std::allocator > const &,int)" (?port_is_open@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z) PortScannerWin32 c:\Users\James\documents\visual studio 2017\Projects\PortScannerWin32\PortScannerWin32\PortScanner.obj 1

Error LNK2019 unresolved external symbol "public: __thiscall sf::IpAddress::IpAddress(class std::basic_string,class std::allocator > const &)" (??0IpAddress@sf@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function "bool __cdecl port_is_open(class std::basic_string,class std::allocator > const &,int)" (?port_is_open@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z) PortScannerWin32 c:\Users\James\documents\visual studio 2017\Projects\PortScannerWin32\PortScannerWin32\PortScanner.obj 1

Error LNK2001 unresolved external symbol "public: static class sf::Time const sf::Time::Zero" (?Zero@Time@sf@@2V12@B) PortScannerWin32 c:\Users\James\documents\visual studio 2017\Projects\PortScannerWin32\PortScannerWin32\PortScanner.obj 1
Warning LNK4272 library machine type 'x64' conflicts with target machine type 'X86' PortScannerWin32 D:\SFML-2.4.2\lib\sfml-network-d.lib 1

Error LNK1120 6 unresolved externals PortScannerWin32 c:\users\james\documents\visual studio 2017\Projects\PortScannerWin32\Debug\PortScannerWin32.exe 1

这些都是我的错误,老实说,我真的一点头绪都没有。我逐字逐句地学习教程并输入依赖项等。

有人知道出了什么问题吗?我会说明显的答案是在 VS 2017 中使用 2015,但很多论坛都说它没有问题,因为 SFML 2015 中的更新允许这样做。

最佳答案

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

您所包含的头文件 (SFML/Network.hpp)“ promise ”您正在使用的类的实现。链接器的工作是将“ 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,以便库的“位数”与您的可执行文件的“位数”匹配。这是 native 机器代码,因此生成的代码必须适用于相同的体系结构。

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

关于c++ - SFML 2.4.2 for Visual C++ 2017 使用 SFML 的 2015 构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44442781/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com