![](/img/trans.png)
[英]Code::Blocks and boost 1.55: static library is not used when dynamic library is present
[英]How to bind static library in a dynamic one in Code::Blocks
我有這個靜態(.a / .lib)庫,我想將其綁定到我的動態(.dll)中。 可以說靜態庫是libColors.a
,動態庫是SWC.dll
。 現在,我已經更改了libColors.a
項目屬性以創建一個靜態庫(進行構建),並且我沒有找到任何創建的.dll
,只有預期的.o和.a文件。 我切換到SWC.dll
項目並更改其屬性以創建動態庫,然后選中該框以創建一個.a文件-鏈接libColors.a
它-並創建.dll文件。 (還要注意,我將__declspec(import/export)
規范放在其class
es上)
現在,我希望此SWC.dll
在可執行文件中使用。 但是,當我在可執行文件中僅包含SWC.h
文件時,它將獲得大量未定義的引用。 似乎這里有問題,因為我沒有在SWC.h
上調用任何函數。 因此,我在.exe生成選項中添加了SWC.a
,現在生成時沒有錯誤。 但是當我運行它時,它說我需要Colors.dll
? 我想念什么?
您可以使用objdump, CFF Explorer或Dependency Walker之類的工具來查看有問題的PE-COFF可執行文件的導入表。
可能的解釋是, Colors
項目的編譯方式實際上不是靜態庫。 您可以通過檢查SWC.dll
和測試可執行文件的導入表來進行檢查。 您可能會在其中之一中找到Colors.dll
的導入條目,以及它試圖導入的功能是什么。
檢查Color.h
聲明的數據和函數,並確保它們未在任何地方用__declspec()
裝飾。 如果Color.h
的函數預處理為諸如'SWC'中的__declspec(dllimport)
,則可能會導致您遇到的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.