我在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$//'
来转换行结尾。