gpt4 book ai didi

c++ - std::atomic 库依赖项 (gcc 4.7.3)

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:23:18 25 4
gpt4 key购买 nike

我一直在尝试使用 std::atomic 进行编译,但我得到了对 __atomic_load、__atomic_store 和 __atomic_store_16 的未解析引用。

我知道在更高版本的 gcc(4.8+?)中包含 -latomic,但我正在使用 gcc 4.7.3 进行编译;我试过添加 -latomic_ops 和 -latomic_ops_gpl,但两者似乎都没有太大作用。

我现在正在安装 gcc 4.8.1,但我确实有一个真正需要为 4.7.3 编译的发布平台。

非常感谢。

编辑:好的,这是导致我遇到的问题的一些代码:

atomics.cpp
#include <atomic>
#include <stdint.h>

struct dataStruct {
int a;
uint16_t b;
float c;
dataStruct(int ai, uint16_t bi, float ci) noexcept : a(ai), b(bi), c(ci) {
}
dataStruct() noexcept : dataStruct(0,0,0) {
}
};

int main() {
std::atomic<dataStruct> atomicValue;

atomicValue = dataStruct(10, 0, 0);

return atomicValue.load().b;
}

使用“g++-4.8.1 *.cpp -std=c++0x -latomic”,编译正常。

使用“g++-4.7.3 *.cpp -std=c++0x -pthread -lpthread -latomic_ops”,失败并显示以下内容:

/tmp/ccQp8MJ2.o: In function `std::atomic<dataStruct>::load(std::memory_order) const':
atomics.cpp:(.text._ZNKSt6atomicI10dataStructE4loadESt12memory_order[_ZNKSt6atomicI10dataStructE4loadESt12memory_order]+0x2f): undefined reference to `__atomic_load'
/tmp/ccQp8MJ2.o: In function `std::atomic<dataStruct>::store(dataStruct, std::memory_order)':
atomics.cpp:(.text._ZNSt6atomicI10dataStructE5storeES0_St12memory_order[_ZNSt6atomicI10dataStructE5storeES0_St12memory_order]+0x35): undefined reference to `__atomic_store'
collect2: error: ld returned 1 exit status

最佳答案

好的,终于在:https://gcc.gnu.org/wiki/Atomic/GCCMM 找到了答案

事实证明,4.7 实际上没有“官方”原子支持(只有头文件)。如果你想在 4.7 编译器中使用原子,你必须下载那个页面上链接的源代码并自己构建它

gcc -c -o libatomic.o libatomic.c
ar rcs libatomic.a libatomic.o

然后,您可以使用

g++-4.7.3 -std=c++0x atomics.cpp -latomic -L./

关于c++ - std::atomic 库依赖项 (gcc 4.7.3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25311073/

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