gpt4 book ai didi

linker - 与 ifort 和 .so 库的正确链接顺序

转载 作者:行者123 更新时间:2023-12-01 15:50:17 31 4
gpt4 key购买 nike

我有两个第 3 方库 A.so 和 B.so,我将与我的可执行文件 executable.exe 链接在一起。 A.so 包含一个由 B.so 解决的错误,也就是说:

  • A::subroutine1()调用时可能会因浮点异常而崩溃(FP 算术错误)
  • B::subroutine1()是一个固定的实现,应该总是被调用而不是 A::subroutine1() .

  • A 和 B 的正确链接顺序是什么?我现在正在做的是:
    ifort <....> executable.exe <...> -lA -lB

    我仍然不时收到浮点异常(该错误无法准确重现,因此很难调试)。但是,当它崩溃时,程序让我知道 A::subroutine1() 是违规者 - 因此 subroutine1() 的错误版本由于某种原因被链接。

    我将把链接顺序作为第一次插入,但是有没有一个工具可以用来检查executable.exe,看看在运行时会调用哪个版本的subroutine1()?

    谢谢!

    最佳答案

    如果你想要subroutine1来自 libB.so被调用,那么正确的链接顺序是-lB -lA (适用于 Linux 和大多数其他 UNIX 共享库实现)。

    is there a tool that I can use to inspect executable.exe to see what version of subroutine1() will be called at runtime



    否:该信息通常不会记录在可执行文件中。规则是:无论哪个共享库定义了 subroutine1第一个是将要使用的。

    例如,如果您链​​接到 -lC -lB -lA , 在链接时 libC.so未定义 subroutine1 , 但后来你重建 libC.so (不重新链接可执行文件)这样,然后 subroutine1来自 libC.so将被调用。

    但是请注意,有一些并发症。例如, libA.so可能与 -Bsymbolic 相关联,这将导致对 subroutine1 的所有调用来自 libA.so绑定(bind)到 subroutine1libA.so 内本身。

    关于linker - 与 ifort 和 .so 库的正确链接顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7715641/

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