簡體   English   中英

是否可以使用MSVC的gcc編譯庫?

[英]Is it possible to use a gcc compiled library with MSVC?

我有一個依賴libiconv進行多項操作的項目。

我正在為Visual Studio 2008使用iconv.lib預編譯二進制文件,但現在我不得不繼續使用Visual Studio 2010,並且沒有更多預編譯的二進制文件可用。

我決定自己編譯它,但正如libiconv文檔所述,沒有官方支持MSVC編譯器。 但是,我在某處讀到gcc可以生成與MSVC編譯器二進制兼容的靜態庫,只要二進制接口保留在C 雖然這聽起來很瘋狂,但我試了一下它實際上幾乎奏效了。

我編譯了它,將libiconv.a重命名為iconv.lib並嘗試iconv.lib鏈接。 (如果這是一個壞主意,請告訴我)。

首先我遇到了一個鏈接錯誤:

1>iconv.lib(iconv.o) : error LNK2001: unresolved external symbol ___chkstk

經過一些研究,我重新編譯了libiconv (在x86和x64版本中),添加了-static-libgcc標志。

它工作,但只適用於我的程序的x64版本。 x86版本始終失敗並出現相同的錯誤。

我應該怎么做才能使這項工作?

是的,這是可能的,因為如果你嚴格編譯為C接口,iconv將鏈接到msvcrt.lib ,這是Windows C運行時(嚴格地說是C,類似於GCC使用的glibc )。 如果你使用GCC的普通C ++編譯器構建它,它將鏈接到libstdc++並且與VC ++(與msvcr.dll鏈接)相比,也會命名mangle。

在您的情況下, __chkstk是檢查堆棧函數 (C運行時的一部分),這是一個注入每個函數調用以檢查堆棧溢出的函數。 我不知道如何解決這個'好'的方式,但是你可以改變iconv的構建選項來構建一個額外的編譯器標志並禁止這個檢查: /Gs999999


但是,我使用Visual C ++ 2005/2008/2010構建了libiconv,並且我在其上構建的軟件工作得很好(軍事機構使用的軟件,如果你需要可信度)。 我確實記得使用VC ++編譯器構建有點煩人,但它不應該太痛苦。

暫無
暫無

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

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