gpt4 book ai didi

c - 创建动态库时如何解析符号?

转载 作者:行者123 更新时间:2023-11-30 14:38:31 25 4
gpt4 key购买 nike

例如,假设我有以下结构:


我的程序
| main.c - 定义 main()
| foo.c - 定义 foo()
我的_dll
| dll_start.c - 定义 dll_start()
| foo.c - 定义 foo()

其中 main() 调用 foo(),然后调用 dll_start()。

它们按什么顺序命名?例如是不是:

  1. 我的程序::主
  2. my_program::foo
  3. my_dll::dll_start
  4. 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com