Не удается связать при использовании boost::filesystem

Я пытаюсь использовать функцию boost::filesystem::exists. Когда я пытаюсь связать, я получаю

/usr/local/include/boost/filesystem/operations.hpp:289: undefined reference to `boost::filesystem::detail::status(boost::filesystem::path const&, boost::system::error_code*)'

ошибка.

Я некоторое время гуглил и нашел только ответы «ссылка с усилением». В моем случае -lboost_system и -lboost_filesystem указаны для компоновщика, но, похоже, это не работает. На самом деле я могу использовать boost::filesytem::path (например), но когда я пытаюсь использовать что-то, что требует заголовка boost/filesystem.hpp, я получаю ошибки компоновщика. Любые идеи?

P.S. Я использую gcc-4.6.4 и boost lib, установленные из репозиториев, но я предполагаю, что gcc-4.6.4 является версией gcc по умолчанию для моей Ubuntu 12.04. Думаю, мне не нужно компилировать boost из исходников?


person Roman    schedule 19.04.2014    source источник


Ответы (1)


У компоновщика (ld) есть много вариантов указать путь поиска для разрешения общих библиотек, man ld предоставит вам все варианты. Предположим, у вас установлен boost в /usr/local/lib, вы можете добавить одну из этих опций в gcc, чтобы передать компоновщику:

  • #P2# <блочная цитата> #P3#
  • #P4# <блочная цитата> #P5#

Другой альтернативой является добавление к вашему LD_LIBRARY_PATH местонахождению ваших библиотек повышения.

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

Компоновщик (ld) использует LD_LIBRARY_PATH в качестве одного из путей поиска необходимых общих библиотек.

Подробнее о компоновщике и общих библиотеках можно прочитать здесь.

Чтобы полностью понять, почему ваша установка не находит библиотеки повышения по умолчанию, вы можете найти этот ответ на stackexchange информативен.

Этот ответ SO предлагает использовать ускорить m4.

person amdn    schedule 19.04.2014
comment
Спасибо, амдн. Вы привели меня к решению. В моей системе есть два набора файлов библиотеки Boost: /usr/lib и /usr/local/lib. По умолчанию используется /usr/lib. Так что у меня сработало указание опции компоновщика -L/usr/local/lib. Пожалуйста, отредактируйте свой ответ в соответствии с моим комментарием, чтобы я мог его принять. - person Roman; 19.04.2014
comment
@Farrel Рад, что мой ответ был полезен ... не уверен, как именно вы хотели бы, чтобы я включил решение, которое сработало для вас ... это должна быть другая альтернатива или вы предлагали мне удалить ссылку на LD_LIBRARY_PATH? - person amdn; 19.04.2014
comment
Просто добавьте это решение в свой ответ, и я отмечу тему как отвеченную. Я полагаю, что LD_LIBRARY_PATH - более верный способ решить проблему. Но для тех, кому просто нужно быстрое исправление -L будет работать (я только что пытался использовать ваш метод, но у меня не сработало: может быть, я неправильно установил загрузку. У меня просто нет достаточно времени, чтобы иметь дело с этим.). - person Roman; 19.04.2014