我在Windows上透過這種方法編譯了boost:
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 行結尾。
在 Linux 下編譯 Boost 最簡單的方法是使用 bzip2 檔案。如果您必須使用 7z,則可以在所有文字檔案上使用諸如dos2unix
或 之類的命令sed -i -e 's/\r$//'
來轉換行結尾。