Я устанавливаю программное обеспечение для перевода Moses на мой Mac OS X 10.9.5 с Xcode 6.1. В инструкции сказано что мне нужно g++
а также Boost
установлены. Как только я это сделаю, я ввожу clone, «cd» в каталог, а затем набираю ./bjam -j8
, Сначала я проверил, что у меня есть предпосылки. Во-первых, g ++ (я просто щелкнул вкладку, чтобы увидеть, что было доступно):
$ g++
g++ g++-4.9
Тогда добавь:
$ brew install boost
Warning: boost-1.56.0 already installed
Затем я попытался установить:
$ ./bjam -j8
Tip: install tcmalloc for faster threading. See BUILD-INSTRUCTIONS.txt for more information.
mkdir: bin: File exists
...patience...
...patience...
...found 4469 targets...
...updating 155 targets...
darwin.link lm/bin/darwin-4.2.1/release/debug-symbols-on/link-static/threading-multi/query
ld: library not found for -lboost_thread
clang: error: linker command failed with exit code 1 (use -v to see invocation)
// Additional error messages...
...failed darwin.link mert/bin/darwin-4.2.1/release/debug-symbols-on/link-static/threading-multi/util_test...
...skipped <pmert/bin/darwin-4.2.1/release/debug-symbols-on/link-static/threading-multi>util_test.passed for lack of <pmert/bin/darwin-4.2.1/release/debug-symbols-on/link-static/threading-multi>util_test...
darwin.link mert/bin/darwin-4.2.1/release/debug-symbols-on/link-static/threading-multi/vocabulary_test
ld: library not found for -lboost_thread
clang: error: linker command failed with exit code 1 (use -v to see invocation)
"g++" -o "mert/bin/darwin-4.2.1/release/debug-symbols-on/link-static/threading-multi/vocabulary_test" "mert/bin/darwin-4.2.1/release/debug-symbols-on/link-static/threading-multi/VocabularyTest.o" "mert/bin/darwin-4.2.1/release/debug-symbols-on/link-static/threading-multi/libmert_lib.a" -lboost_unit_test_framework -llzma -lbz2 -ldl -lboost_system -lz -lboost_thread -lm -liconv -g -Wl,-dead_strip -no_dead_strip_inits_and_terms...failed darwin.link mert/bin/darwin-4.2.1/release/debug-symbols-on/link-static/threading-multi/vocabulary_test...
...skipped <pmert/bin/darwin-4.2.1/release/debug-symbols-on/link-static/threading-multi>vocabulary_test.passed for lack of <pmert/bin/darwin-4.2.1/release/debug-symbols-on/link-static/threading-multi>vocabulary_test...
...failed updating 72 targets...
...skipped 83 targets...
The build failed. If you need support, run:
./jam-files/bjam -j8 --debug-configuration -d2 |gzip >build.log.gz
then attach build.log.gz to your e-mail.
You MUST do 3 things before sending to the mailing list:
1. Subscribe to the mailing list at http://mailman.mit.edu/mailman/listinfo/moses-support
2. Attach build.log.gz to your e-mail
3. Say what is the EXACT command you executed when you got the error
ERROR
Там не показано множество сообщений об ошибках (скомпонованных в «// Дополнительные сообщения об ошибках»), и все они имеют форму «ld: библиотека не найдена для -lboost_thread». Ясно, что что-то не может найти библиотеку, связанную с надстройкой, но я не знаю, как это исправить. У кого-нибудь есть предложения? Я буквально просто скопировал пару строк из инструкции по установке, и Моисей достаточно популярен, так что очевидная ошибка в инструкциях по установке была бы замечена давно.
Дополнительный комментарий: На странице инструкций по установке они перечисляют команду, в которой они могут заставить установщика найти библиотеку надстройки:
./bjam --with-boost=~/workspace/temp/boost_1_55_0 -j8
Мой импульс в
/usr/local/Cellar/boost/1.56.0/
Я пытался заменить --with-boost=
Аргумент с указанным выше путем к файлу, но это тоже не сработало (я получил те же ошибки).
Я собираюсь опубликовать это в списке рассылки Moses, но я также хотел бы спросить здесь, потому что я получил эту же ошибку («библиотека не найдена … clang: error: команда компоновщика завершилась с кодом выхода 1») с другое программное обеспечение, и мне было бы полезно узнать общую стратегию, чтобы убедиться, что clang
могу найти мои библиотеки.
Этот пакет ожидает нестандартную раскладку надстройки (или, может быть, это стандартная раскладка для установлены boost во многих системах, но это, конечно, не макет по умолчанию для boost в моих рабочих каталогах):
bjam --help
говорит:
--with-boost=/path/to/boost
Если Boost находится в нестандартном месте, укажите его здесь. Этот каталог
ожидается, что он будет содержать include и lib или lib64.
Когда мое дерево сборки Boost находится в
/home/sehe/custom/boost/boost // headeers
/home/sehe/custom/boost/stage
/home/sehe/custom/boost/stage/lib // libraries
Я создал каталог «forwarding» — поэтому мне не нужно устанавливать boost:
mkdir /tmp/boost-moses
cd /tmp/boost-moses/
ln -sfv /home/sehe/custom/boost/stage/lib lib
ln -sfv /home/sehe/custom/boost include
Теперь я могу запустить сборку в каталоге mosesdecoder с помощью
./bjam --with-boost=/tmp/boost-moses
Здесь не сказано, какую версию компиляции Моисея скомпилировал, но его последний комментарий пришел в норму. Когда я собирался скомпилировать версию 2.1.1, мне нужно было переписать Jamroot
файл и jam-files/boost-build/tools/mpi.jam
и изменить все boost_mpi
упоминает boost_mpi-mt
, Мне кажется, что boost-1.55 использовал другой стиль библиотеки, чем boost-1.56, и Моисей в этой версии был адаптирован под 1.55.
Однако я не могу сейчас скомпилировать Moses 3.0 с boost-1.55 или boost-1.56 из-за undefined reference to boost::filesystem::path::stem()
,
К сожалению, я не могу опубликовать это как комментарий к предыдущему ответу …