【问题标题】:c++11 threads, SFML and code::blocksc++11 线程、SFML 和 code::blocks
【发布时间】:2014-01-10 21:09:53
【问题描述】:

我正在尝试使用 c++11 std::thread 和用于网络的 SFML 库运行此代码,但是我无法构建它。我很确定这与我如何设置编译器有关,但我不知道......我怎样才能让它工作?我一直在搞砸试图让它工作,通过教程等几个小时,所以我转向 Stack Overflow 寻求答案。我在 windows7 64 位机器上使用 code::blocks IDE 和 x32-4.8.1-posix-dwarf-rev5 编译器。

#include <iostream>
#include <thread>
#include <string>
#include <SFML/System.hpp>
#include <SFML/Network.hpp>


using namespace std;

void doNetwork() {
    cout << "Starting..." << endl;

    sf::TcpListener listener;
    listener.listen(88);

    // Wait for a connection
    sf::TcpSocket socket;
    listener.accept(socket);
    cout << "New client connected: " << socket.getRemoteAddress() << endl;

    // Receive a message from the client
    char buffer[1024];
    size_t received = 0;
    socket.receive(buffer, sizeof(buffer), received);
    cout << "The client said: " << buffer << endl;

    // Send an answer
    string message = "Welcome, client";
    socket.send(message.c_str(), message.size() + 1);
}

int main()
{
    thread task(doNetwork);
    task.join();
    return 0;
}

这是构建调试日志所说的:

-------------- Build: Debug in bang ---------------

Compiling: main.cpp
Linking console executable: bin\Debug\bang.exe
obj\Debug\main.o: In function `Z9doNetworkv':
C:/Users/user/CppProjects/bang/main.cpp:12: undefined reference to `sf::TcpListener::TcpListener()'
C:/Users/user/CppProjects/bang/main.cpp:13: undefined reference to `sf::TcpListener::listen(unsigned short)'
C:/Users/user/CppProjects/bang/main.cpp:16: undefined reference to `sf::TcpSocket::TcpSocket()'
C:/Users/user/CppProjects/bang/main.cpp:17: undefined reference to `sf::TcpListener::accept(sf::TcpSocket&)'
C:/Users/user/CppProjects/bang/main.cpp:18: undefined reference to `sf::TcpSocket::getRemoteAddress() const'
C:/Users/user/CppProjects/bang/main.cpp:18: undefined reference to `sf::operator<<(std::ostream&, sf::IpAddress const&)'
C:/Users/user/CppProjects/bang/main.cpp:23: undefined reference to `sf::TcpSocket::receive(void*, unsigned int, unsigned int&)'
C:/Users/user/CppProjects/bang/main.cpp:28: undefined reference to `sf::TcpSocket::send(void const*, unsigned int)'
obj\Debug\main.o: In function `ZN2sf11TcpListenerD1Ev':
C:/Users/user/CppProjects/SFML-2.1/include/SFML/Network/TcpListener.hpp:43: undefined reference to `sf::Socket::~Socket()'
obj\Debug\main.o: In function `ZN2sf9TcpSocketD1Ev':
C:/Users/user/CppProjects/SFML-2.1/include/SFML/Network/TcpSocket.hpp:46: undefined reference to `sf::Socket::~Socket()'
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 0 seconds)
10 errors, 0 warnings

我在编译器中使用的设置:

编译器标志:

-std=C++0x

其他选项:

-std=gnu++0x -U__STRICT_ANSI__

定义:

SFML_STATIC

链接器设置:

sfml-system-s-d
sfml-network-s-d

搜索目录 - 编译器:

C:\Users\user\CppProjects\SFML-2.1\include
C:\Users\user\CppProjects\bang\include

搜索目录 - 链接器:

C:\Users\user\CppProjects\SFML-2.1\lib\

工具链可执行文件:

-编译器安装目录:

C:\Program Files (x86)\mingw-builds\x32-4.8.1-posix-dwarf-rev5\mingw32

-C编译器:

i686-w64-mingw32-gcc-4.8.1.exe

-C++ 编译器:

i686-w64-mingw32-c++.exe

-动态库的链接器:

i686-w64-mingw32-c++.exe

-静态库的链接器:

ar.exe

-调试器:

gdb.exe

-资源编译器:

windres.exe

-制作程序:

mingw32-make.exe

【问题讨论】:

  • 您没有链接包含这些符号的 sfml 库。请参阅 sfml 文档。
  • 我的全局链接器设置中有这个:C:\Users\user\CppProjects\SFML-2.1\lib\sfml-network-sd.lib C:\Users\user\CppProjects\SFML- 2.1\lib\sfml-system-sd.lib 和我的搜索目录中的这个链接器:C:\Users\user\CppProjects\SFML-2.1\lib\ 这些是否正确?
  • @user1551924,查看一些 CodeBlocks 文档会告诉您,您需要 sfml-network-s-dsfml-system-s-d
  • 我已将链接器设置更改为 sfml-network-s-d 和 sfml-system-s-d,但在构建时遇到完全相同的错误

标签: c++ multithreading c++11 codeblocks sfml


【解决方案1】:

我有一个类似的问题,我如何在 Linux 系统上解决这个问题:项目/构建选项

转到链接器设置选项卡。 我在那里添加了:sfml-network

完成。 希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 2013-11-22
    • 2020-09-07
    • 2013-12-01
    • 2020-12-17
    • 2015-03-24
    相关资源
    最近更新 更多