簡體   English   中英

使用cygwin為Windows構建靜態庫

[英]Building static libraries for windows using cygwin

我正在嘗試為Windows構建CGAL ,以便在Visual Studio 2010下的項目中使用。CGAL需要GMPMPFR庫,並在分發中提供它們。 但是,它以lib + dll捆綁形式提供它們,而我希望它們以單個.lib文件的形式靜態編譯。

所以現在我正在嘗試在Windows下構建GMP和MPFR作為靜態庫。 我使用的cygwin用於此目的的建議在這里 呼叫后configuremake我有輸出庫.a擴展額外的.la文件。 我對Unix的靜態庫不是很了解,所以我建議它與.lib相同,只是擴展名不同。 我將它重命名為.lib並鏈接到我的項目 - 它很合適。

第一個問題 :我是否正確這樣做? .a和.lib文件真的一樣嗎? 我看到了這個問題,但是覺得它沒有足夠的用處。

然后問題出現了:我有

error LNK2019: unresolved external symbol ___getreent referenced in function ___gmp_default_reallocate

似乎某些cygwin函數未鏈接到生成的gmp.lib 我在這里發現, getreent可以從libcygwin.a導出。 所以我將它復制到libcygwin.lib並鏈接到我的項目。 毫不奇怪,我收到以下錯誤:

error LNK2005: _strcpy already defined in libcygwin.lib(t-d001719.o) in libcmtd.lib(strcat.obj) 

當然,我不知道在該庫中聲明了哪些函數以及如何聲明它們,似乎strcpy與Visual Studio中的函數沖突。 我真正想要發生的是gmp.lib足夠智能靜態鏈接這個功能。 所以,

第二個問題 :如何強制GMP鏈接庫依賴項? 或者如何在不使用cygwin的情況下為Windows正確構建GMP?

更新:請參閱MPIR項目頁面以獲取所有問題的答案(它允許您使用Visual Studio構建MPIR,GMP兼容庫和MPFR)。 新的MPIR主頁位於此處 ,但據我所知,缺少MPFR信息。


你不要Cygwin。

你需要一個Bash shell和MinGW(.org / -w64)。 如果使用cygwin編譯器進行構建,則需要鏈接到Cygwin DLL,在您的情況下該DLL是愚蠢的,因為GMP和MPFR均可由MinGW生成。

唯一的問題是:我不相信MSVC可以構建任何庫,並且MSVC無法與MinGW庫鏈接(這正是您的項目作者捆綁DLL和導入庫的原因),因此您需要構建所有內容使用MinGW GCC或使用DLL。


以下是構建GMP和MPFR的GCC靜態庫的說明。

為了使用MinGW-w64 GCC為Windows構建GMP,您需要MSYS 在C:\\ Dev \\ msys之類的地方解壓縮,以便存在C:\\ Dev \\ msys \\ bin \\ sh.exe。

然后,您將需要一個MinGW-w64 GCC:

(我建議使用“個人構建”,尤其是4.6.3-1軟件包。下載4.6.3-1-gcc_rubenvb.7z軟件包,但其他任何MinGW軟件包都應這樣做)

解壓縮說C:\\ Dev \\ mingw64,以便C:\\ Dev \\ mingw64 \\ bin \\ gcc.exe存在。

雙擊C:\\ Dev \\ msys \\ msys.bat。 類型:

export PATH=/c/Dev/mingw64/bin:$PATH

然后按Enter鍵。 將GMP和MPFR源解壓縮到您的/ home / USERNAME / *目錄,創建構建目錄,並記住用於配置:

--enable-static --disable-shared --prefix=/easytemplibinstalldir

隨着

--host=i686-w64-mingw32

對於32位或

--host=x86_64-w64-mingw32

對於64位。 我相信GMP還要求--build設置為相同的值。 配置完成后,鍵入make ,然后make install ,可選地在make check之前。

你應該在/ easytemplibinstalldir / lib中有libgmp.a。 對於MPFR,請添加

--with-gmp=/easytemplibinstalldir

到它的配置線。

您必須按照正確的順序手動鏈接libgmp和libmpfr才能起作用,為此,在Windows上無法進行自動的依賴項鏈接。

暫無
暫無

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

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