簡體   English   中英

如何將庫靜態鏈接到DLL?

[英]How do I statically link a library into a DLL?

我在DLL地獄中。 我有2個DLL,比如說A.dll和B.dll,它們的名稱沖突-彼此使用相同的C ++類名,等等。這兩個DLL都可以作為靜態庫使用。

我是否可以創建一個“包裹”的DLL,例如Aprime.dll,它導出與A.dll類似的類,方法等,並將功能委派給A.lib中的類,但靜態鏈接到Aprime.dll? 這樣不能避免名稱沖突嗎?

我一直在嘗試,但是不確定我是否正確設置了MSVS項目。 正在生成Aprime.dll,但根據Dependency Walker的說法,Aprime.dll仍在加載A.dll。

我一直在搜索,但是我發現的大多數內容僅適用於CRT或MFC中的靜態鏈接,它們具有自己的開關。

我在鏈接器->輸入->其他依賴項下添加了A.lib。

我是否缺少一些魔術鏈接器命令行開關或其他東西?

是的,該方法應該可行。 但是,關鍵是確保您不要在Aprime.dll頭文件中包含任何原始的A.dll頭文件。 否則,如果有人包含Aprime.h / pp,則它將包含Ah / pp,然后您將再次發生沖突。

所以你想要像這樣的東西:

// Library A includes
class test
{
};

BH

// Library B includes
class test
{
}

Aprime.h

// Proxy class
class myTest
{
}

Aprime.cpp

#include "A.h"
#include "Aprime.h"

...

main.cpp中

#include "Aprime.h"
#include "B.h"

...

請注意,main永遠不會同時包含A和B。In僅會包含Aprime和B。B仍然是靜態lib,而Aprime是DLL。

是的,您可以,並且Windows僅在很小的程度上支持它。 除一堆對A.DLL的引用外, Aprime.DLL是空的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM