2017-05-06 2 views
0

Ich bin kein Profi in der Befehlszeile kompiliert. Ich entwickelte die folgende asio UDP-Anwendung, die den Code von boost official example nimmt.Wie verlinkt man in/usr/local compiling mit clang ++?

// udpServer.cpp 

#include <boost/asio.hpp> 
#include <iostream> 
#include <array> 

using boost::asio::ip::udp; 

int main() 
{ 
    try 
    { 
    boost::asio::io_service io_service; 

    udp::socket socket(io_service, udp::endpoint(udp::v4(), 13)); 

    for (;;) 
    { 
     std::array<char, 1> recv_buf; 
     udp::endpoint remote_endpoint; 
     boost::system::error_code error; 
     socket.receive_from(boost::asio::buffer(recv_buf), remote_endpoint, 0, error); 

     if (error && error != boost::asio::error::message_size) 
     throw boost::system::system_error(error); 

     std::string message = "some_string"; 

     boost::system::error_code ignored_error; 
     socket.send_to(boost::asio::buffer(message), remote_endpoint, 0, ignored_error); 
    } 
    } 

    catch (std::exception& e) 
    { 
    std::cerr << e.what() << std::endl; 
    } 

    return 0; 
} 

Ich habe Boost 1.59 mit Macports installiert, da dies die Version I sudo port install boost habe zu tun. Ich sehe, dass boost lag in meinem /usr/local/lib & Header in /usr/local/include

habe ich versucht, Vorschläge von anderen Diskussionen, aber der Code nicht kompiliert, da es nicht in der Lage ist, zu verbinden zu steigern. Ich bin auf OSX & versucht, mit Klirren zu kompilieren mit dem Befehl folgende

clang++ -std=c++14 udpServer.cpp 

versucht, diese

clang++ -std=c++14 -I /usr/local/include/boost -L /usr/local/lib udpServer.cpp 

Aber die folgende Fehlermeldung erhalten:

Undefined symbols for architecture x86_64: 
"boost::system::system_category()", referenced from: 
    boost::asio::error::get_system_category() in udpServer-4b9a12.o 
    boost::system::error_code::error_code() in udpServer-4b9a12.o 
    ___cxx_global_var_init.2 in udpServer-4b9a12.o 
"boost::system::generic_category()", referenced from: 
    ___cxx_global_var_init in udpServer-4b9a12.o 
    ___cxx_global_var_init.1 in udpServer-4b9a12.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 
+0

warum nicht 'homebrew' verwenden? – merito

Antwort

1

starten:

clang++ -std=c++14 -I /usr/local/include -L /usr/local/lib -lboost_system udpServer.cpp -o updServer 

Sie fügen Header-Datei als <boost/asio.hpp> hinzu, also übergeben Sie einfach -I /usr/local/include. -I-L lassen Sie Linker nur wissen wo Header und Bibliotheken finden. Sie müssen auch linker wissen, welche Bibliothek Sie tatsächlich über -l<library_name> verknüpfen müssen.

Übrigens ist /usr/local/include Standardkopfzeilensuchpfad, /usr/local/lib ist Standardbibliothekssuchpfad. So können Sie nur:

clang++ -std=c++14 -lboost_system udpServer.cpp -o updServer 
+0

vielen dank. das ist was ich brauchte. verstehe, wie das jetzt funktioniert. ja –

Verwandte Themen