c++ - 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()
funcA
funcA
对于 Windows 也是如此,还是我必须手动查找我需要的所有符号的地址?
解决方案
在研究了 Stack Overflow 上已经回答的问题后:
我意识到,如果我想在 Windows 上进行类似的工作,我必须为我的共享库A创建一些导入库。
起初我认为它只需要 MSVC,但看起来 MinGW 也需要导入库,因为它是 Windows 上的工作方式。如果我错过了什么,请纠正我。
对我来说这是一个很大的禁忌,所以我可能会改变我使用共享库的方式,以通过附加接口显式检索我需要的每个符号。幸运的是,它们的数量并不多。
推荐阅读
- python - 为什么我的递归在 Swift 中有效,但在 Python 中无效?
- swift - 使用 DiskArbitration 和 IOKit 获取所有卷的树状结构
- android - 如何在 Android 11 上获取请求所有文件访问权限
- python - 3D t-sne 的特定标记
- node.js - 推送被拒绝,在 heroku 上部署 nodejs 应用程序时无法编译 Node.js 应用程序
- netsuite - 以编程方式安排地图缩减脚本
- python - Pygame 窗口不会出现在 Jupyter 中
- angular - Angular 从多个 http 服务获取数据并映射它们
- excel - 为什么将我的数组读入 VBA 中的单元格时,它会重复每一行?
- python - 如何判断列表中的项目何时在 Python 中更改了位置