【发布时间】:2020-03-30 15:33:32
【问题描述】:
我在一个大型项目中有这样的依赖:
MyEXE --> MyDLL --> MyStaticLib
这意味着我的可执行文件 (MyEXE) 依赖于 dll (MyDLL),而 dll 使用静态库 (MyStaticLib)。问题是我可以从MyEXE 调用MyStaticLib 方法,它编译和链接没有任何问题。我检查了 MyEXE 项目的 Visual Studio (2015) 上的 Linker/Input 页面,但我找不到 MyStaticLib 作为 MyEXE 的依赖项之一。
现在的问题是:
-
MyEXE怎么可能在没有任何显式依赖的情况下调用MyStaticLib方法? - Windows 上是否有任何工具可以列出可执行文件使用的所有静态库? (这里是a solution for Linux)
更新 1: MyStaticLib 的标头中没有 #pragma comment(lib, ...) 指令。因此,静态库无法使用此指令链接到 .exe。
【问题讨论】:
-
在编译完 dll 并且没有构建 .exe 之后,您是否尝试从驱动器中删除静态库并查看是否仍然生成可执行文件?
-
如果它是一个 static 库,它将被批发到使用它的其他(动态)库中。没有运行时动态依赖。这就是静态库的全部点。
-
@drescherjm 我会检查的。
-
一个 dll 将包含静态库。但是我认为它不应该将它暴露给可执行文件,这意味着如果需要直接使用它,可执行文件还应该链接到静态库。
标签: c++ windows dll static-libraries