2010-11-22 91 views
1

我對C++相當陌生,並試圖找出TagLib library用於我正在開發的項目。我正在使用Windows 7 64位上的Visual Studio 2010中的非託管C++。我以前從未使用過外部庫,所以我對如何解決這個問題非常困惑。在Visual Studio 2010中使用帶有非託管代碼的DLL?

this blog entry我得到了libtaglib.a和taglib.dll文件。我遇到了關於如何使用TagLib的this SO question,但它涉及到QT Creator,而不是Visual Studio,而且我對該主題不夠了解,無法理解正在說什麼來將其轉化爲Visual Studio的需求。

因此,一些問題:

  • 它甚至有可能與非託管代碼來做到這一點?
  • .a文件的功能到底是什麼?
  • 最重要的是,我如何去在我的程序中使用taglib.dll?

我一直在谷歌尋找一種方式來做到這一點,但我的主要問題是,我碰到的一切都超過了我的腦海。請讓我知道是否需要更多信息。很感謝任何形式的幫助!謝謝!

+0

考慮到沒有託管C++代碼這樣的事情,在這裏不是「非託管」類型的冗餘嗎? – 2010-11-22 03:55:25

+2

@Billy,曾經是微軟託管的C++或C++/CLI,我不知道它是否仍然存在...... – 2010-11-22 04:31:37

+0

@Eli:那將是「C++託管擴展」或「C++/CLI」 ,它不是C++(它們是完全不同的語言) – 2010-11-22 04:37:57

回答

4

我似乎已經成功地完成了它。以下是我所做的一個粗略概述:

1.)我使用CMake生成Visual Studio解決方案。

2.)我試圖在VS解決方案中構建標籤項目,但失敗了。

3)我做了更正一些源文件概述這裏:http://old.nabble.com/taglib-fails-to-compile-with-MS-VC%2B%2B-2010-td29185593.html

4)我在釋放模式重新建造的標籤項目。這次它成功了。

5.)我將生成的dll,def和lib文件複製到與我的項目源文件相同的目錄中。

6)我複製我的項目從標籤庫源到子目錄中的頭文件(不知道這完全是很好的做法)

7)在我的項目設置,我的子目錄與頭文件作爲附加的包含目錄。

8.)我通過添加>現有項目將dll,exp和lib文件添加到我的項目中。

9.)我添加了一些來自taglib示例的代碼並構建它。一切工作,所以我想我知道了。

我碰到一個警告,因爲DLL是在發佈模式下構建的,我的項目必須在發佈模式下運行,否則會崩潰。我猜如果我用調試模式內置一個DLL替換了我可以在調試模式下運行我的程序,但我沒有嘗試過。

+1

對於問題的實際解決方案,請+1 – 2010-11-23 16:34:31

3

您無法使用Visual Studio特定於GCC的庫(因爲它們有.a擴展名)。您必須從源代碼構建庫才能將其用於MSVC。一旦你完成了這個任務,只需將構建過程中生成的.lib添加到項目中,並且應該可以立即使用。 (請注意,您需要不管你是編譯的動態鏈接或不.lib - 在MSVC土地無所謂)

編輯 -

爲了編譯 - 看着自己的TagLib後TagLib你需要獲得CMake build systemTagLib itself,並讓CMake爲你構建一個visual studio解決方案。使用該解決方案,您將能夠構建您需要的.lib.dll。請注意,由於TagLib是KDE庫,因此您可能還需要構建一些QT位才能使所有工作順利進行。但是,我沒有與圖書館的具體經驗,所以我不會在這裏有所幫助。

+0

我使用CMake生成包含5個項目(ALL_BUILD,INSTALL,tag,tag_c和ZERO_CHECK)的VS解決方案。其中兩個成功建立,兩個失敗,一個跳過。我只需要標記項目來構建?如果是這樣,那是失敗的。我知道你對這個圖書館沒有任何經驗,但是沒有問題。另外,爲了一切正常工作,需要一些QT位是什麼意思? – shanet 2010-11-22 17:03:54

+0

@ S201:對不起,我真的不知道。 Qt是一個庫(http://qt.nokia.com/products/),在這個庫上構建了所​​有的KDE庫。對不起,我不能再用了: – 2010-11-22 18:48:53

+0

謝謝你的幫助,我今天玩了幾個小時,我想我把它全部整理好了。回答如下: – shanet 2010-11-23 06:26:49

1

如果您有.dll文件,則不必重新編譯源代碼(以創建.lib文件)。使用dumpbin/exports和lib(都帶有Visual Studio),您可以創建一個可以與應用程序鏈接的庫。在這個鏈接中,你可以看到一個很好的解釋:http://www.coderetard.com/2009/01/21/generate-a-lib-from-a-dll-with-visual-studio/

但是比利賽德,可能你會需要QT的其他部分來使用這個庫。

+0

感謝你的回答Luis。我用你提供的指南從dll中生成一個lib文件。我的問題是現在我該怎麼處理它?我將它添加到我的項目VS項目中。包括庫的頭文件,是否正確?是否將頭文件複製到與我的VS項目相同的目錄中並將「#include 」放入我的程序中?還有,正如我所問比利以上,你是指需要QT的其他部分來使用這個庫嗎? – shanet 2010-11-22 17:31:50