分享
三行代码  ›  专栏  ›  技术社区  ›  hacksoi

创建动态库时如何解析符号? - How are symbols resolved when creating a dynamic library?

  •  0
  • hacksoi  · 技术社区  · 2 月前

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

    my_program | main.c - defines main() | foo.c - defined foo() my_dll | dll_start.c - defined dll_start() | foo.c - defines foo()

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

    他们叫什么顺序?例如,它是:

    1. 我的程序:主
    2. 我的程序:foo
    3. 我的\u dll::dll \u开始
    4. 我的\u dll::foo

    ?

    基本上,我想知道在创建动态库时,链接器(链接器是否运行?)在解析dll内部的符号时,总是使用dll内部的符号-例如,在这种情况下,我的dll内部的foo()是否调用我的dll::foo或我的程序::foo?

    1 回复  |  直到 2 月前
        1
  •  1
  •   selbie    2 月前

    是的,链接器运行以完成dll的生成,并且需要定义 foo 建造。但只要你不链接同一个包含 my_program::foo 进入之内 my_dll.dll , the 为链接dll本身而拾取的将是 my_dll::foo .

    在这里你唯一能让自己陷入麻烦的时候就是 shared.lib 实现独立的 函数,并与exe和dll链接。如果DLL在本地实现 .