[英]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.