c++ - 模板类的静态成员上的 __attribute__((section (".something"))) 是否允许?

标签 c++ gcc static attributes

在下面的示例中,clang 将各自的变量正确地放入“.aaa”和“.ggg”中。 GCC 适用于“.ggg”但不适用于“.aaa”(类模板的静态成员变量)。

template<int I>
struct s{
    __attribute__((section(".aaa"))) static  int a[100];
};

__attribute__((section(".ggg"))) int  b[100]; 

template<int I>
__attribute__((section(".aaa"))) int s<I>::a[100];

这是 GCC 错误还是 clang 的自愿支持?

是否有好的解决方法(除了使 s::a 成为全局成员而不是静态成员之外)?

注意:我省略了编译器版本,因为 Godbolt 上所有版本的 GCC 基本上都做同样的事情 https://godbolt.org/g/E5s0mi

最佳答案

gcc的官方文档说

Use the section attribute with global variables and not local variables, as shown in the example.

本地联动 = 错误? 如果类本身是本地的,则静态成员变量是本地的。 我会通过模板声明说它是本地的。

source

关于c++ - 模板类的静态成员上的 __attribute__((section (".something"))) 是否允许?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42513904/

相关文章:

c++ - 引用文献未给出预期结果

gcc - 如何在 gcc 和 make 中使用预编译头?

c++ - 在函数中声明静态变量有什么用?

c++ - 在 C++ 源文件中隐藏变量的可见性

c++ - 我的字节数组到十六进制字符串转换器有什么问题,或者为什么它在写入文件时在某个位置后剪切符号?

c++ - vector 迭代器在C++中不兼容

c++ - DistCC 和 CMake - 在运行 make 时在本地和分布式构建之间进行选择

c++ - 如何将工具链交叉编译到 ARMv5 平台?

Objective-C 协议(protocol)静态方法?

c++ - 对大文件的可移植支持