簡體   English   中英

Windows linker 是否使用 LoadLibrary 解析 DLL 中的未定義符號?

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

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