例如,假设我有以下结构:
我的程序
| main.c - 定义 main()
| foo.c - 定义 foo()
我的_dll
| dll_start.c - 定义 dll_start()
| foo.c - 定义 foo()
其中 main() 调用 foo(),然后调用 dll_start()。
它们按什么顺序命名?例如是不是:
- 我的程序::主
- my_program::foo
- my_dll::dll_start
- my_dll::foo
?
基本上,我想知道当您创建动态库时,链接器(链接器是否运行?)在解析 dll 本身内部的符号时是否总是使用 dll 内部的符号 - 例如,在本例中,是否my_dll 中的 foo() 调用 my_dll::foo 或 my_program::foo?
最佳答案
是的,链接器运行以完成 DLL 的构建,并且需要 foo
的定义来构建。但只要您没有将包含 my_program::foo
的同一代码库链接到 my_dll.dll
中,foo
就会被选中链接 DLL 本身将是 my_dll::foo
。
唯一会给自己带来麻烦的情况是,如果您有一个 shared.lib
静态代码库,它实现了一个独立的 foo
函数,并且与两个函数链接EXE 和 DLL。如果 DLL 具有 foo
的本地实现,那么 DLL 选择哪一个可能是不明确的。
关于c - 创建动态库时如何解析符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56553654/