我知道这与在链接器命令行中指定共享对象的顺序有关,也就是说,如果你这样做:
gcc -o main main.c -lA -lB
libB中的CTORs将在libA中的CTORs之前运行。
这种行为是标准化的吗?我可以在一个在硬件平台之间可移植的框架中使用它吗?
附注: CTOR是一个包含__attribute__((constructor))内容的函数。
发布于 2011-03-26 22:56:16
依赖于此的应用程序非常脆弱……还有一些人认为任何使用全局构造函数,特别是在C中,都是不使用库的主要过错和理由。pthread_once提供了一种更干净的方法来获得相同的安全初始化,而无需使用您的库的程序员在进入main之前担心您可能已经弄乱了程序的初始状态。
发布于 2011-03-27 02:35:35
所有的__attribute__机制都是对gcc的具体扩展。因此,这不是标准化的。
C本身没有静态存储变量的动态构造器的概念或类似的东西。它唯一拥有的就是用编译常量表达式来初始化这样的变量。
POSIX线程中有许多工具可以解决这个问题。R..。前面已经提到过pthread_once。pthread_mutex_t和pthread_cond_t具有计算结果为常量表达式的宏。这样,它们就可以用作全局范围内变量的初始化器。
https://stackoverflow.com/questions/5443040
复制相似问题