【问题标题】:libgcc linker error: hidden symbol __aarch64_swp1_acq_rel in libgcc.a is referenced by DSOlibgcc 链接器错误:libgcc.a 中的隐藏符号 __aarch64_swp1_acq_rel 被 DSO 引用
【发布时间】:2023-01-31 09:32:06
【问题描述】:

我正在尝试链接一个我无法控制的共享库。这个库有一个未定义的符号(nm 输出): U __aarch64_swp1_acq_rel

这似乎是在 libgcc.a 中定义的:

[user@fedora ~]$ nm -a /usr/lib/gcc/aarch64-redhat-linux/12/libgcc.a | grep swp1_acq_rel
0000000000000000 T __aarch64_swp1_acq_rel
[user@fedora ~]$ objdump -t /usr/lib/gcc/aarch64-redhat-linux/12/libgcc.a | grep swp1_acq_rel
0000000000000000 g     F .text  000000000000002c .hidden __aarch64_swp1_acq_rel

但是每当我尝试链接时,我都会在这个问题的标题中得到错误。我明白这个符号是隐藏的动态链接(如果我错了请确认)。所以我的问题是当我正在使用(和链接)的共享库没有定义它时,链接这个 libgcc 符号的正确方法是什么。

我预计可以使用我系统中的 libgcc.a 解析此符号。为什么要隐藏?

【问题讨论】:

  • 产生错误的确切链接命令是什么?

标签: c++ linux shared-libraries linker-errors libgcc


【解决方案1】:

用 cflags "-mno-outline-atomics" 编译它可以解决我的问题。 GCC 10.0 支持调用线外助手来实现原子操作。 您可以查看编译代码以了解差异: https://godbolt.org/z/z8W7z1cqx

【讨论】:

    猜你喜欢
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 2016-12-08
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 2013-04-13
    相关资源
    最近更新 更多