首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ld-linux.so执行CTORs的顺序是什么?

ld-linux.so执行CTORs的顺序是什么?
EN

Stack Overflow用户
提问于 2011-03-26 22:44:04
回答 2查看 214关注 0票数 0

我知道这与在链接器命令行中指定共享对象的顺序有关,也就是说,如果你这样做:

gcc -o main main.c -lA -lB

libB中的CTORs将在libA中的CTORs之前运行。

这种行为是标准化的吗?我可以在一个在硬件平台之间可移植的框架中使用它吗?

附注: CTOR是一个包含__attribute__((constructor))内容的函数。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-26 22:56:16

依赖于此的应用程序非常脆弱……还有一些人认为任何使用全局构造函数,特别是在C中,都是不使用库的主要过错和理由。pthread_once提供了一种更干净的方法来获得相同的安全初始化,而无需使用您的库的程序员在进入main之前担心您可能已经弄乱了程序的初始状态。

票数 3
EN

Stack Overflow用户

发布于 2011-03-27 02:35:35

所有的__attribute__机制都是对gcc的具体扩展。因此,这不是标准化的。

C本身没有静态存储变量的动态构造器的概念或类似的东西。它唯一拥有的就是用编译常量表达式来初始化这样的变量。

POSIX线程中有许多工具可以解决这个问题。R..。前面已经提到过pthread_oncepthread_mutex_tpthread_cond_t具有计算结果为常量表达式的宏。这样,它们就可以用作全局范围内变量的初始化器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5443040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档