Установка программного обеспечения для перевода Moses. Сообщение об ошибке: & lt; ld: библиотека не найдена для -lboost_thread & quot;

Я устанавливаю программное обеспечение для перевода 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 могу найти мои библиотеки.

4

Решение

Этот пакет ожидает нестандартную раскладку надстройки (или, может быть, это стандартная раскладка для установлены 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
0

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

Здесь не сказано, какую версию компиляции Моисея скомпилировал, но его последний комментарий пришел в норму. Когда я собирался скомпилировать версию 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(),
К сожалению, я не могу опубликовать это как комментарий к предыдущему ответу …

0

По вопросам рекламы [email protected]