Linux Boost 编译

Linux Boost 编译

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

相关内容