我正在尝试链接一个我无法控制的共享库。此库有一个未定义的符号(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条答案
按热度按时间d5vmydt91#
用cflags“-mno-outline-atomics”编译它可以解决我的问题。GCC 10.0允许调用外部helper来实现原子操作。您可以查看编译代码以了解不同之处:https://godbolt.org/z/z8W7z1cqx