2010-10-10 63 views
1

我有一個基於Qt和Google協議緩衝區構建的通信庫。目前正在Windows上使用MinGW/GCC進行構建。我的目標是在.NET上使用C#中的同一個庫,並且使用C++/CLI(使用託管代碼橋接非託管代碼)在頂部的薄包裝器的幫助下。我試圖直接在我的C++/CLI項目中使用MinGW生成的DLL,但我不斷收到鏈接器錯誤(現在不記得錯誤代碼,但有關丟失標記和函數/簽名)。在Visual Studio 2010 C++/CLI項目中使用MinGW/GCC構建的DLL

第一個問題是:我應該能夠使用MinGW生成的DLL與Visual Studio編譯器/鏈接器?還是我需要再次編譯庫,僅對所有項目使用VS編譯器?

如果我應該能夠直接使用MinGW生成的DLL,我如何在Visual Studio 2010中引用它?在項目設置中,它似乎查找* .lib文件,但在MinGW/GCC的輸出中找不到任何.lib文件。它確實產生* .a文件,但似乎像Visual Studio不處理這種類型的文件。

我還應該提到Qt和protobuf也是用MinGW編譯的。但是,如果有必要的話,我當然可以重新編譯VS 2010中的所有部分。儘管保存重新編譯時間會很好,因爲我們的buildserver已經有了使用MinGW的工作設置。

+1

我討厭評論脫離主題,但你能描述一下你在Windows上如何使用MinGW編譯Google Protocol Buffers? – 2010-11-08 17:18:42

回答

2

最簡單的使用方法是使用Visual Studio重新編譯它。這是當我假設您打算使用的接口中使用的C++類型和類時。

如果你有這個庫的C接口,你可以通過LoadLibrary動態加載庫並使用GetProcAddress來訪問這些函數。

然而,它完全取決於你打算如何使用庫。

+1

Qt不是C接口...使用Visual Studio重新編譯不僅是最簡單的方法,而且是唯一的方法。 gcc並沒有爲C++類使用相同的內存佈局,所以即使你爲mingw-gcc構建的DLL創建了一個導入庫,它也不起作用。 – 2010-10-11 03:13:01

+0

好的,謝謝你們的答案..我會繼續在VS中重新編譯它。然後.. – notbo 2010-10-11 04:53:20

+0

@ Ben Voigt:我知道,Qt本身沒有C接口。但他可以爲他需要的東西創造一個。在那種情況下,他可以使用它。即使它是由MinGW創建的 – Vinzenz 2010-10-11 06:04:47

相關問題