[英]Does Windows linker resolve undefined symbols in DLL with LoadLibrary?
在 Linux 中,當我使用dlopen()
從可執行文件(或共享庫)加載共享庫時,我希望該庫中的未定義符號將被自動解析,當然只要可執行文件(或共享庫)定義了這些符號。
例如,我有帶有這些 header 和源文件的庫A :
#pragma once
int funcA();
#include "A/header.h"
int funcA() {}
我也有這個源文件的庫B :
#include "A/header.h"
void funcB() {
funcA();
}
對於庫B ,我指定庫A的 header 的路徑,但我沒有將庫A鏈接到庫B 。
在這種情況下,如果我通過調用dlopen()
從庫A加載庫B ,則庫B中未定義的符號funcA
將被解析,因此庫B將能夠調用funcA
。
Windows 也是如此,還是我必須手動查找我需要的所有符號的地址?
在研究了 Stack Overflow 上已經回答的問題后:
我意識到如果我想在 Windows 上做類似的工作,我必須為我的共享庫A創建一些導入庫。
起初我認為它只需要 MSVC,但看起來 MinGW 也需要導入庫,因為它是 Windows 上的工作方式。 如果我錯過了什么,請糾正我。
對我來說這是一個很大的禁忌,所以我可能會改變我使用共享庫的方式,以通過附加接口顯式檢索我需要的每個符號。 幸運的是,它們的數量並不多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.