提问人:Anna 提问时间:1/8/2023 最后编辑:Anna 更新时间:1/31/2023 访问量:491
libgcc 链接器错误:DSO 引用了 libgcc.a 中的隐藏符号__aarch64_swp1_acq_rel
libgcc linker error: hidden symbol __aarch64_swp1_acq_rel in libgcc.a is referenced by DSO
问:
我正在尝试链接我无法控制的共享库。该库具有未定义的符号(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 解析此符号。为什么它被隐藏?
答:
1赞
Bill Cong
1/31/2023
#1
用cflags编译它 “-mno-outline-atomics” 可以解决我的问题。 GCC 10.0 支持调用联外帮助程序以实现原子操作。 您可以查看编译代码以查看差异: https://godbolt.org/z/z8W7z1cqx
评论