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$//'來轉換行結尾。

相關內容