首页 > 解决方案 > Windows 链接器是否使用 LoadLibrary 解析 DLL 中的未定义符号?

问题描述

在 Linux 中,当我使用从可执行文件(或共享库)加载共享库时dlopen(),我希望该库中的未定义符号将被自动解析,当然只要可执行文件(或共享库)定义了这些符号。

例如,我有包含这些头文件和源文件的库A :

#pragma once
int funcA();
#include "A/header.h"
int funcA() {}

我也有这个源文件的库B :

#include "A/header.h"
void funcB() {
    funcA();
}

对于库B我指定库A头的路径,但我没有将库A链接到库B

在这种情况下,如果我通过调用从库A加载库B ,则库 B 中未定义符号将被解析,因此库B将能够调用.dlopen()funcAfuncA

对于 Windows 也是如此,还是我必须手动查找我需要的所有符号的地址?

标签: c++cwindowsdlllinker

解决方案


在研究了 Stack Overflow 上已经回答的问题后:

我意识到,如果我想在 Windows 上进行类似的工作,我必须为我的共享库A创建一些导入库

起初我认为它只需要 MSVC,但看起来 MinGW 也需要导入库,因为它是 Windows 上的工作方式。如果我错过了什么,请纠正我。

对我来说这是一个很大的禁忌,所以我可能会改变我使用共享库的方式,以通过附加接口显式检索我需要的每个符号。幸运的是,它们的数量并不多。


推荐阅读