2011-09-06 25 views
2

現在我只想使用一些音頻庫,而LibXtract就是其中之一。在gcc的幫助下,我構建了LibXtract作爲靜態庫,並且一切正常:)如何在Windows上構建LibXtract作爲DLL

但是當我嘗試在MSVC中使用lib時,遇到了一個問題:因爲lib靜態格式與gcc和MSVC不兼容,我只是試圖將LibXtract編譯爲DLL(共享)格式,但即使我設置了配置標誌( - enable-shared),該庫仍被編譯爲靜態格式。這個 ?或者你可以給我一個更好的方法來實現目標(使用MSVC中的LibXtract)?非常感謝:)

+0

你是如何在mingw,cygwin或其他東西中構建它的? –

+0

我只是使用mingw :) – Hugo

+0

可以在mingw中建立一個靜態庫,並將它與MSVC中內置的代碼連接起來。例如我以這種方式使用FFMPEG庫。對不起,我不知道是否做了什麼特別的事情來實現這個 –

回答

1

我搜索了LibXtract代碼,發現它似乎沒有dll輸出代碼,所以我認爲LibXtract可能只是現在可以編譯成靜態格式,否則你不得不修改庫代碼...(不太確定)

現在我只是將由sh./configure操作生成的原始代碼和config.h複製到一個新的VC-Static-library項目中,我也修改了許多代碼(大多數是演員操作),以適應VS編譯器,最後我得到了LibXtract.lib,但我不太確定修正...但簡單的測試程序似乎是OK :)

關於Andy T提到的話題(謝謝你的意見:)),他說,這是建立在MinGW的靜態庫可以在MSVC鏈接,我已經試過,發現至少兩件事情,這將導致失敗的結論:

  1. 如果靜態庫是用標準C編譯的,那麼在大多數情況下幾乎都可以,因爲.a和.lib的格式看起來是一樣的,但是當你調用一些在MSVC中不支持的函數時,會有未解決的問題...

  2. 如果靜態庫是在標準C++中編譯的,會出現更多的問題,顯而易見的一個是名稱混亂,因爲名稱混編操作在gcc和MSVC之間非常不同,這會導致鏈接時出現無法解決的問題...