Как сделать ссылку на повышение в / usr / local при компиляции clang ++?

Я не профессионал в компиляции на основе командной строки. Я разработал приложение UDP asio, взяв код из повысить официальный пример.

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

У меня установлен Boost 1.59 с использованием Macports, так как это версия, которую я сделал sudo port install boost, Я вижу, что импульс находится в моем /usr/local/lib & заголовки в /usr/local/include

Я пробовал предложения из других обсуждений, но код не компилируется как есть не в состоянии связать, чтобы повысить. Я на OSX & пытается скомпилировать с помощью clang с помощью следующей команды

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

попробовал это

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

Но получаю следующую ошибку:

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

Решение

Попробуй это:

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

Вы включаете заголовочный файл как <boost/asio.hpp>так что просто пройдите -I /usr/local/include, -I -L просто сообщите компоновщику, где найти заголовки и библиотеки. Вам также нужно сообщить компоновщику, какую библиотеку вам действительно нужно связать через -l<library_name>,

Кстати, /usr/local/include путь поиска заголовка по умолчанию, /usr/local/lib по умолчанию путь поиска библиотеки. Так что вы можете просто:

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

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector