2015-08-07 11 views
1

Я очень новичок в использовании GNU. Я пытаюсь начать использовать библиотеку файловой системы boost, и я продолжаю получать эти ошибки. Я пытаюсь получить текущий рабочий каталог, используя boost::filesystem.boost :: filesystem Неопределенные символы для архитектуры x86_64

Мой код:

boost::filesystem::path full_path(boost::filesystem::detail::current_path()); 
cout << "Current path is : " << full_path << endl; 

Моя команда:

g++ -I boost_1_58_0 main.cpp -o example 

Результат:

Undefined symbols for architecture x86_64: 
    "boost::filesystem::detail::current_path(boost::system::error_code*)", referenced from: 
     _main in main-1c56eb.o 
    "boost::system::system_category()", referenced from: 
     ___cxx_global_var_init2 in main-1c56eb.o 
    "boost::system::generic_category()", referenced from: 
     ___cxx_global_var_init in main-1c56eb.o 
     ___cxx_global_var_init1 in main-1c56eb.o 
ld: symbol(s) not found for architecture x86_64 

Может кто-то пожалуйста, объясните, что спрашивает ошибка для? Что я сделал не так?

ответ

0

boost.filesystem не является библиотекой только для заголовков. Вы должны ссылаться на библиотеку, используя -L и -l флаги. (И убедитесь, что библиотека уже правильно построена). Вам необходимо сослаться на библиотеки boost_system и boost_filesystem. Командная строка может выглядеть следующим образом:

g++ -Iboost_1_58_0 -Lboost_1_58_0/lib/ -lboost-filesystem -lboost_system main.cpp -o example 

(заменить -L спор с пути, в котором находится файл libboost-filesystem.so)

Тогда, прежде чем вы сможете запустить исполняемый файл, вы должны позволить загрузчик знать где искать библиотеки. Вы обстреливать быть в состоянии сделать это с помощью следующей команды:

export DYLD_LIBRARY_PATH=/path/to/boost/bib:$DYLD_LIBRARY_PATH 

Чтобы сделать это автоматически, я бы рекомендовал использовать систему сборки, как cmake вместо просто в командной строке.

+0

Эта команда работала и создала файл .exe. 'g ++ -I boost_1_58_0 -Lboost_1_58_0/lib/-lboost_filesystem -lboost_system main.cpp -o example'. Однако когда я запускаю файл .exe, я получаю сообщение об ошибке: 'dyld: библиотека не загружена: libboost_filesystem.dylib' –

+0

Нашел кого-то с той же проблемой: http://stackoverflow.com/questions/15189999/error-on-boost -filesystem –

+0

Вы также должны указать путь к библиотеке для загрузки во время выполнения. В linux перед запуском вашей программы выполняется «экспорт LD_LIBRARY_PATH =/path/to/boost/lib: $ LD_LIBRARY_PATH'». На MacOS это может быть немного иначе, я точно не знаю. –

Смежные вопросы