c++ libgcc链接器错误:DSO引用了libgcc. a中的隐藏符号__aarch64_swp1_acq_rel

nlejzf6q  于 2023-02-01  发布在  其他
关注(0)|答案(1)|浏览(360)

我正在尝试链接一个我无法控制的共享库。此库有一个未定义的符号(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解析这个符号,为什么要隐藏它?

d5vmydt9

d5vmydt91#

用cflags“-mno-outline-atomics”编译它可以解决我的问题。GCC 10.0允许调用外部helper来实现原子操作。您可以查看编译代码以了解不同之处:https://godbolt.org/z/z8W7z1cqx

相关问题