Компиляция Linux Boost

Компиляция Linux Boost

Я скомпилировал boost этим методом на Windows:

Go to the directory tools/build/v2/.
Run bootstrap.sh
Run b2 install --prefix=PREFIX where PREFIX is the directory where you want Boost.Build to be installed
Add PREFIX/bin to your PATH environment variable.

И это работало. Теперь я пробую это на Linux, и это не работает. У меня следующая ситуация:

kron@kron:~/Software/Sources/boost_1_49_0/tools/build/v2$ ./bootstrap.sh 
bash: ./bootstrap.sh: /bin/sh^M: bad interpreter: No such file or directory
kron@kron:~/Software/Sources/boost_1_49_0/tools/build/v2$ sh bootstrap.sh 
: not foundh: 8: 
: not foundh: 10: 
: not foundh: 14: 
bootstrap.sh: 15: Syntax error: Bad for loop variable
kron@kron:~/Software/Sources/boost_1_49_0/tools/build/v2$ ls -l
total 224
-rw-r--r--  1 kron kron   271 Nov  5  2006 boost-build.jam
-rw-r--r--  1 kron kron  7437 Nov  9  2008 boost_build.png
-rw-r--r--  1 kron kron  7169 Jan 14  2009 boost_build.svg
-rw-r--r--  1 kron kron   842 Nov  5  2006 boost.css
-rw-r--r--  1 kron kron  1088 Jun  6  2011 bootstrap.bat
-rw-r--r--  1 kron kron   778 Oct 29  2003 bootstrap.jam
-rwxr-xr-x  1 kron kron  2737 Jun  6  2011 bootstrap.sh
drwx------  2 kron kron  4096 Feb 22 18:28 build
-rw-r--r--  1 kron kron 36462 Jun  6  2011 build-system.jam

решение1

Это^Mвозврат каретки. Windows представляет переносы строк двухсимвольной последовательностью возврата каретки, перевода строки (CRLF или ^M^J). Linux и другие unice-системы используют один символ LF. Этот CR рассматривается как обычный символ, поэтому ядро ​​ищет интерпретатор, вызываемый /bin/sh␍вместо /bin/sh. При явном вызове shон также рассматривал CR как обычный символ, часть имен команд.

Это признак того, что эти файлы были скопированы с машины Windows, где они были текстовыми файлами. Вы не можете напрямую копировать текстовые файлы между машинами Windows и Linux, вам нужно преобразовать окончания строк. Скорее всего, вы извлекли архив на Windows, а затем скопировали файлы на Linux. Вместо этого извлеките архив на Linux.

В случае с Boost, по состоянию наверсия 1.49.0, архив распространяется в четырех форматах:

  • gzip и bzip2, с окончаниями строк unix;
  • zip и 7z, с окончаниями строк Windows.

Самый простой способ компиляции Boost под Linux — использовать архив bzip2. Если вам нужно работать с 7z, вы можете использовать такие команды, как dos2unixили sed -i -e 's/\r$//'для всех текстовых файлов, чтобы преобразовать окончания строк.

Связанный контент