簡體   English   中英

在 Windows 上使用 Boost 和 Cygwin

[英]Using Boost with Cygwin on Windows

對於比我更高級的用戶來說,這應該是一個簡單的問題。 :-) 如何在 windows 上使用帶有 cygwin 的 boost 庫?

我正在使用 cygwin 在 winxp 機器上使用 g++ 進行編程。 我需要修改二階 Bessel 函數,所以我下載了最新版本的 boost 庫並將其安裝在 'c:\cygwin\lib\boost_1_38_0\' 文件夾中。

我正在嘗試從他們網站的“入門”部分運行“example.cpp”程序: http://www.boost.org/doc/libs/1_35_0/more/getting_started/unix-variants.html

我正在使用簡單的 Bash shell 命令行從創建示例文件的目錄編譯:'g++ -Wall example.cpp'

我不斷收到消息:“boost/lambda/lambda.hpp:沒有這樣的文件或目錄”

我在命令行中嘗試了所有可能的 -L、-l、-I 選項組合以包含目錄,但無濟於事。 還嘗試在我的 windows 系統的 PATH 行中添加文件夾。

如何鏈接到 /boost 目錄和所有子目錄? header 文件 'lambda.hpp' 正在調用子目錄中的其他 header 文件。

您可能還不太熟悉 C++ 嗎? 看來您混淆了術語。

C++ 程序的構建分為兩個步驟:編譯和鏈接。 在第一步中,每個源文件(通常稱為.cpp)都是單獨處理的。 每個.cpp 文件通常使用多個頭文件,因此編譯器首先插入這些頭文件 - 字面意思。 這就是為什么它被稱為#include。

在第二步中,linker 將所有已編譯的.cpp 文件放在一起並構建您的最終程序。 其中一些已編譯的.cpp 可能以前捆綁在一起,其中捆綁稱為庫。

Boost 是頭文件和.cpp 文件的集合。 因此,編譯器和 linker 可能都需要找到 Boost 目錄。 從您的錯誤消息中,很明顯編譯器步驟是問題所在。 linker 不再需要標頭。

編譯器將看到#include <boost/lambda/lambda.hpp>指令。 這意味着它需要知道在哪里可以找到第一級boost目錄。 我猜此時路徑將是/lib/boost_ 1_ 38_0/include (總是有find / -name lambda.hpp shotgun appraoch)

如果你不是完全喜歡 cygwin,你應該看看http://nuwen.net/mingw.html它給你一個完整的 MinGW ZF6F87C9FDCF8B3C3F07F93F1ZEE871 為你安裝所有的庫。

編輯:我應該明確指出,除了 Cygwin 之外,您還可以使用這個 MinGW 安裝,而不是作為替代品。 只需確保 MinGW bin 目錄出現在您的 PATH 中 Cygwin 之前。

我認為您需要-I /lib/boost_1_38_0 - 盡管這是一個非常不尋常的地方。 你必須讓我們知道你是如何安裝它的,你是把它解壓到你說的位置,還是你運行了makefile? 我假設由於您提供了 windows 路徑,因此您沒有在 cygwin 中安裝它 - 您可能應該這樣做。 unix 入門指南中的說明應該有所幫助 - 盡管不要下載預構建的bjam - 它需要使用 cygwin 構建。

但是,如果您對 cygwin(或一般的 unix)不太熟悉,我想您可能會發現使用原生 windows 工具更容易 - 如Neil Butterworth 的回答

謝謝大家的信息,這是一個很好的介紹使用 cygwin 庫。 丹尼爾是對的。 雖然任何變化都會產生錯誤,但以下行(使用 caps i)可以解決問題:

g++ -Wall -I /cygdrive/c/cygwin/lib/boost_1_38_0/example.cpp -o 示例

我也會在接下來的幾天里檢查 MinGW。

ps 我只是在該文件夾中下載並解壓縮了 boost,但由於我只使用 header 文件,我可能不需要使用 cygwin 編譯。 【cygwin自帶的boost版本是1.33,好像沒有貝塞爾函數。】

這是在 win7 cygwin64 g++ 5.4 和 2017-7 的 boost-1.64.7z 上。 谷歌沒有顯示任何有用的結果來開始提升 windows(提升過時了嗎?)。

通過實驗,我設法編譯並運行了一個 boost graph 示例程序,如下所示:

  :: g++ 5.4 in c:\cygwin64
  :: 7z extract boost download in c:\tools\boost\boost164
  > set BOOST_ROOT=c:\tools\boost\boost164
  > setx BOOST_ROOT  c:\tools\boost\boost164 -m
  > cd %BOOST_ROOT%
  > bootstrap.sh gcc  (the bat files doesn't work)
  > b2.exe
     ...failed updating 58 targets...
    ...skipped 18 targets...

    ...updated 1123 targets... 

  :: Lots of example here (not ranked highly by google)
  > mklink /D eg %BOOST_ROOT%/libs/graph/example

  :: Compiled and run [maxflow code using boost library][1] 
  :: http://vision.csd.uwo.ca/code
  > unzip ; vi Makefile
     CPPFLAGS = -I %BOOST_ROOT%/ 
     LDFLAGS = -L%BOOST_ROOT%/stage/lib 
  > make
  > set PATH=%PATH%;%BOOST_ROOT%/stage/lib
  > maxflow.exe 
    Flow = 6

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM