Я скомпилировал 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$//'
для всех текстовых файлов, чтобы преобразовать окончания строк.