Программа C++ не может найти ускорение

Я пытаюсь скомпилировать проект MultiNEAT (https://github.com/peter-ch/MultiNEAT). Я установил boost и boost-python, и он находится в /usr/local/Cellar/boost. Я также отредактировал ~/.bash_profile, добавив /usr/local/Cellar/boost/1.60.0_1/include в PATH. Однако, когда я пытаюсь скомпилировать и установить MultiNEAT с помощью

sudo python setup.py install

Я получаю проблему:

running install
running build
running build_py
running build_ext
building '_MultiNEAT' extension
cc -fno-strict-aliasing -fno-common -dynamic -arch x86_64 -arch i386 -g -Os -pipe -fno-common -fno-strict-aliasing -fwrapv -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 -DNDEBUG -g -fwrapv -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -arch x86_64 -arch i386 -pipe -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c src/Genome.cpp -o build/temp.macosx-10.11-intel-2.7/src/Genome.o -march=native -DUSE_BOOST_PYTHON -DUSE_BOOST_RANDOM -std=gnu++11 -g -Wall
src/Genome.cpp:37:10: fatal error: 'boost/unordered_map.hpp' file not found
#include <boost/unordered_map.hpp>
     ^
1 error generated.
error: command 'cc' failed with exit status 1

Итак, мой вопрос: как я могу заставить программу найти библиотеку boost и успешно скомпилировать MultiNEAT? Моя система OS X Yosemite. Спасибо!


person Excalibur    schedule 27.04.2016    source источник


Ответы (1)


Вы должны изменить свои определения компиляции, чтобы включить файлы заголовков boost. Возможно, вам потребуется добавить библиотеки boost (и их каталоги) в настройки компоновки. Я мог бы сказать больше, если бы вы опубликовали то, как вы создаете свое приложение.

person GMichael    schedule 27.04.2016
comment
Привет @Michael, спасибо за ответ! Я загрузил код MultiNEAT и попытался собрать приложение, запустив предложенный им скрипт python «sudo python setup.py install», следуя инструкциям на multineat.com/download.html. Я не совсем знаком с такими вещами, как CMake или cc. Все, что я знаю, это то, что система собирается через файл setup.py. - person Excalibur; 27.04.2016
comment
То, что я вижу в setup.py, означает, что вам нужно вручную отредактировать его и добавить расположение файлов заголовков и библиотек BOOST в соответствующие команды. Для этой цели существуют выражения extra_compile_args= и libraries=. - person GMichael; 27.04.2016
comment
Да, на самом деле я пробовал это, например, добавить '-DBOOST_ROOT=/usr/local/Cellar/boost/1.60.0_1/include/' в выражениях extra_compile_args=, но все равно не удалось скомпилировать. - person Excalibur; 27.04.2016
comment
Вы должны добавить что-то вроде -I/usr/local/Cellar/boost/1.60.0_1/include/ и -L/usr/local/Cellar/boost/1.60.0_1/lib - person GMichael; 27.04.2016
comment
Огромное спасибо! После добавления двух аргументов он может найти ускорение и скомпилировать! Просто любопытно, почему я должен предлагать такие два аргумента после того, как я добавил пути в PATH. - person Excalibur; 27.04.2016
comment
Потому что PATH не имеет ничего общего с компиляцией и линковкой. Они делают совершенно разные вещи. Вам следует изучить процесс компиляции, если вы собираетесь разрабатывать на C/C++. Это очень полезные знания. - person GMichael; 27.04.2016
comment
Кроме того, программа показывает ошибку, в которой говорится: «ld: библиотека не найдена для -lboost-python». Мой boost-python установлен в /usr/local/Cellar/boost-python/1.60.0/. Итак, как я могу добавить два пути, используя аргумент -L? - person Excalibur; 27.04.2016
comment
Я попытался добавить два -L для библиотек, и вывод показывает: warning: no library file corresponding to '-L/usr/local/Cellar/boost/1.60.0_1/lib' found (skipping) warning: no library file corresponding to '-L/usr/local/Cellar/boost-python/1.60.0/lib' found (skipping), но я проверил и уверен, что библиотеки есть. - person Excalibur; 27.04.2016
comment
Привет @Michael, я наконец понял! Я добавил library_dirs=['/usr/local/Cellar/boost/1.60.0_1/lib', '/usr/local/Cellar/boost-python/1.60.0/lib'], в ext_modules= и '-I/usr/local/Cellar/boost/1.60.0_1/include/' в extra_compile_args=, и теперь он успешно компилируется! - person Excalibur; 27.04.2016