std::atomic library dependency (gcc 4.7.3)

std::atomic library dependency (gcc 4.7.3)

本文关键字:gcc atomic library dependency std      更新时间:2023-10-16

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

我知道在更高版本的gcc(4.8+?)你包括- atomic,但我编译与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化c++ 0 x -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

Ok,终于找到了答案: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./