静态库中目标文件的顺序

发布于 2024-12-23 15:49:39 字数 280 浏览 2 评论 0原文

我知道,当链接到多个静态库或目标文件时,顺序很重要(依赖库应在其依赖项之前列出)。我想知道,在使用 ar 创建库文件时,是否适用相同的规则,并且库内的顺序是否重要,或者在同一个 .a 文件中是否适用?没有什么区别。
我正在使用复杂的依赖关系图打包 200 多个目标文件,这样做

ar rcs mylib.a objs/*.o

比按正确顺序列出它们要容易得多。

我正在使用 gcc,如果它有什么区别的话。

I know that when linking to multiple static libraries or object files, the order matters (dependent libraries should be listed before their dependencies). I want to know if, when creating a library file with ar, this same rule applies and the order within the library matters, or within the same .a file it doesn't make a difference.
I am packing 200+ object files with a complicated dependency graph, and doing

ar rcs mylib.a objs/*.o

is considerably easier then listing them in the correct order.

I am using gcc, if it makes a difference.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夏天碎花小短裙 2024-12-30 15:49:39

很久以前,图书馆内的秩序曾经很重要。

对于任何 15-20 年以上的 UNIX 系统来说,它不再重要。来自 man ranlib

   An archive with such an index speeds up linking to the library
   and allows routines in the library to call each other without
   regard to their placement in the archive.

大多数非古代 UNIX 系统要么在构建存档库时自动生成 __.SYMDEF (其中包含上述索引),要么在内存中构建它链接时间。

The order within the library used to matter long time ago.

It no longer matters on any UNIX system newer than ~15-20 years. From man ranlib:

   An archive with such an index speeds up linking to the library
   and allows routines in the library to call each other without
   regard to their placement in the archive.

Most non-ancient UNIX systems either produce the __.SYMDEF (which contains above index) automatically while building the archive library, or build it in-memory at link time.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文