SFML community forums

Help => Network => Topic started by: shadowmouse on July 01, 2015, 02:45:13 pm

Title: sf::IpAddress:toString() not working
Post by: shadowmouse on July 01, 2015, 02:45:13 pm
I've made sfml from source (a two month old version of 2.3)  to work with MinGW 5.1.0 (with -std=c++14) with codeblocks on windows 8.1 and all network functions that I've tried work fine, except sf::IpAddress::toString(). This is my code:
#include <iostream>
#include <string>

#include <SFML/Graphics.hpp>
#include <SFML/Network.hpp>

int main()
{
    sf::RenderWindow window(sf::VideoMode(600,600), "Long distance pong");
    sf::IpAddress address(sf::IpAddress::getLocalAddress());
    std::cout<<address.toString()<<std::endl;
    std::cin.get();
    sf::TcpSocket socket;
    //sf::Socket::Status = socket.connect("");
    sf::sleep(sf::milliseconds(1000));
}
 
It keeps coming up with undefined reference to sf::IpAddress::toString[abi:cxx11]() const. I don't think it can be a problem with my linking as I've checked it loads of times, CMake didn't come up with any errors while I was building and no other errors or warnings are being produced (with -Wall on). Does anyone know why this one function isn't working?

I found that function in the repository and replaced my code (above) with this
#include <iostream>
#include <string>
#include <windows.h>

#include <SFML/Graphics.hpp>
#include <SFML/Network.hpp>

int main()
{
    sf::IpAddress address(sf::IpAddress::getLocalAddress());
    in_addr addr;
    addr.s_addr = address.toInteger();
    std::cout<<inet_ntoa(addr)<<std::endl;
    std::cin.get();
}
 
and it works, but I would prefer to use the SFML function.
Title: Re: sf::IpAddress:toString() not working
Post by: eXpl0it3r on July 01, 2015, 07:33:52 pm
It keeps coming up with undefined reference to sf::IpAddress::toString[abi:cxx11]() const.
Sounds like you compiled SFML for C++11 while compiling your application for C++14. Make sure to add the -std=c++14 flag in the CMake advanced options.

Also, you should always provide the full error and not just excerpts.

The reason you get the error is because the C++11 ABI and C++14 ABI in GCC 5.1 are probably not compatible.
Title: Re: sf::IpAddress:toString() not working
Post by: shadowmouse on July 01, 2015, 07:48:29 pm
It runs now, thanks, though the command prompt came up with something about auto_ptr when I was running mingw32-make. It was probably referring to the std::auto_ptr<AudioDevice> in AudioDevice.cpp. It's surprising that there are still those in there.
Title: Re: sf::IpAddress:toString() not working
Post by: eXpl0it3r on July 01, 2015, 07:51:18 pm
Well auto_ptr is C++03 which is the version SFML is using, while all the other smart pointers were only introduced in C++11. Since auto_ptr is now deprecated a compiler may return a warning, but it's nothing to worry about. ;)