2014-02-21 91 views
2

我想玩opus一些,所以我下載了opus 1.1但是它好像我不能真正將它鏈接到我的visual studio 2010 express項目。我嘗試添加了opus1.1/include路徑屬性/ VC++ Directoris/include目錄,但鏈接仍然抱怨 一些功能如何將opus鏈接到您的visual studio項目?

error LNK2019: unresolved external symbol _opus_decoder_create referenced in function ... 
error LNK2019: unresolved external symbol _opus_decoder_destroy referenced in function... 
error LNK2019: unresolved external symbol _opus_encoder_destroy referenced in function... 
error LNK2019: unresolved external symbol _opus_encoder_ctl referenced in function... 
error LNK2019: unresolved external symbol _opus_encode referenced in function... 
error LNK2019: unresolved external symbol _opus_decode referenced in function... 

任何幫助將appriciated!

回答

0

C++庫通常由頭文件(用於編譯器)和庫文件(用於鏈接器)組成。你只提供頭文件,但沒有庫文件,所以鏈接器抱怨。包含路徑僅用於頭文件,與鏈接器[*]無關。

您下載的庫可能包含一些* .lib文件。這是鏈接器所需的文件。在Visual Studio中,在「VC++目錄>庫目錄」(最好在所謂的「Property Manager」窗口)中指定文件的目錄,並在項目設置中指定* .lib文件,位於「Linker> Input>附加依賴性「。

現在遇到了困難:您必須確保您的項目是使用與* .lib文件構建時相同的運行時庫設置進行編譯的。例如,如果* .lib文件是使用/ MD構建的,那麼您必須執行相同的操作。如果* .lib文件沒有以正確的方式提供,那麼你最終會想自己構建庫。實際上,在MSVC中,你可以通過頭文件進行自動鏈接,這是一些Boost庫使用的技術,但現在讓我們忽略它。

+0

這是最奇怪的部分,我真的找不到任何lib文件夾或lib文件。現在發現一個自述,它最高審計機關: 「==編譯libopus ==爲了從分佈壓縮包建,你只需要做到以下幾點: %的./configure %使 」 真的不知道該怎麼辦 –

+0

此答案對此問題沒有幫助,因爲不,opusfile庫不包含.lib文件。 –

1

有一個在opus1.1/win32的一個.sln文件,在Visual Studio 2010中打開它,並編譯調試和發佈,那麼它會創建.lib文件

+0

它沒有DLL,因爲沒有DLL導出。一旦我添加了_declspec,它就完成了。 –

0

的原因是,「視窗」分佈opusfile是使用mingw64編譯的,並生成.a鏈接庫以及傳統的.dll文件。因此,沒有直接的方法將opusfile與Visual Studio相關聯。

這意味着,就像提供的那樣,你只能使用mingw64來鏈接「Windows」發行版,如果你問我,它不會對大多數基於Windows的開發者有利。

「的./configure & &使」你是怎麼建UNIX風格的軟件,並且需要大量一套文本處理支持工具(的automake,autoconf的,是Bourne像貝殼等),以及,通常情況下, GCC,而不是Windows上的平臺本地編譯器。

正確的答案是生成.lib文件,或者通過移植的所有代碼在分發到Visual Studio你自己(很多工作),或通過從生成的DLL鏈接庫:http://support.microsoft.com/kb/131313/en-us

注意,一般來說,這是行不通的 - 只有在庫API是基於C的(而不是基於C++的)並且沒有錯誤匹配的分配(你在哪裏分配,而庫是否是空閒的,反之亦然) )以及生成.dll文件的編譯器是否與Visual Studio ABI兼容。

您還可以通過生成帶有空實現的「存根」庫並使用該庫中的.lib來生成可鏈接的庫,或者可以使用LoadLibrary()和GetProcAddress()進行動態加載。

所以,是的,libopusfile開發人員在構建庫的「windows」版本時並不會對絕大多數基於Windows的開發人員特別有幫助。

順便說一句:我自己有這個無用的SDK的問題,我解決了它們,並重新打包了Visual Studio的解決方案。這包括額外的頭文件,這些頭文件是必需的但不包括在內,以及從使用dumpbin找到的函數生成.lib可鏈接庫。請注意,這還沒有被廣泛的測試,但我必須在此基礎上進行工作OPUS文件播放工具:

http://www.enchantedage.com/opusfile-0.6-for-visual-studio

這包括報頭,需要的Visual Studio的.lib文件。

相關問題