std::atomic library dependency (gcc 4.7.3)
std::atomic library dependency (gcc 4.7.3)
我一直在尝试用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./
相关文章:
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 如何从 std::atomic 中提取指针 T<T>?
- 奇怪的结构&GCC&clang(void*返回类型)
- GCC本机矩阵运算库
- PowerPC ppc64le上的Gcc Woverloaded虚拟错误
- gcc和c++17的过载解析失败
- 数据成员SFINAE的C++17测试:gcc vs clang
- GCC对可能有效的代码抛出init list生存期警告
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 为什么与常规GCC不同,即使有"学究性错误",MinGW-GCC也能容忍丢失的返回类型
- 使用gcc从静态链接的文件中查找可选符号
- 普通环路未使用gcc 4.8.5自动矢量化
- std::memory_order for std::atomic:<T>:wait
- 有了gcc,是否可以链接库,但前提是它存在
- 在clang++预处理器中确定gcc工具链版本
- gcc Atomic在gcc 4.1.1中内置了奇怪的行为
- std::atomic library dependency (gcc 4.7.3)
- is_lock_free<T> gcc 4.7.2 中的 std::atomic 中没有定义?