问题标签 [unix-ar]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
16395 浏览

c - 组合静态库

假设我有三个C静态库,说libColor.a取决于 *libRGB.*a ,而后者又取决于libPixel.a。据说库libColor.a依赖于库libRGB.a,因为在 libColor.a 中有一些对libRGB.a中定义的一些符号的引用。如何将上述所有库组合成一个独立的新libNewColor.a

独立意味着新库应该定义所有符号。因此,在链接时,我只需要提供-lNewColor。新库的大小应该是最小的,即它不应该包含libColor.a等未使用的 libRGB.a 中的任何符号。我在ar命令中使用了各种选项(用于创建和更新静态库/档案) )。

0 投票
1 回答
2543 浏览

xcode - libtool vs ar 用于创建静态库(xcode 链接器)

在 Mac 10.5 上使用 xcode 通过 libtool 和 ar 通过命令行创建一个静态库都会生成一个 libMainProject.a 文件,但是,当尝试使用 libtool 生成的文件链接到 xcode 应用程序时,我最终会收到多条消息,例如

“project1 的 vtable 引用自:libMainProject.a(project1.o) 中的 _ZTV27project1$non _lazy _ptr”

使用 ar one 完全没问题,并且链接正确。我尝试在链接时向 libtool 添加 -c 选项,但这似乎没有影响。所以我想我的两个选择是

1) 找出导致 ar 和 libtool 版本之间符号差异的原因,并使 libtool 生成相同的信息。

2) 让 xcode 使用 ar 而不是 libtool 来生成静态库。

任何想法或建议将不胜感激。

提前致谢。

0 投票
1 回答
180 浏览

performance - 提高 ar 归档性能

我有一个包含大量自动生成代码的项目,我们在链接到最终可执行文件之前将其构建到静态库中。我们使用 gcc/gnat 5.04a 的文件太多了,我们不得不将作业拆分成批处理并多次调用 ar 来构建库(为了避免命令行长度限制),例如:

我们正在寻找潜在的速度改进。看起来,随着存档的增长,每批需要的时间越来越长,大概是因为在添加对象之前需要搜索更多(更新)。这似乎就是为什么删除存档比仅更新旧存档更快的原因。为了追求更快的速度,我们在 ar 命令中使用了标志“qcS”。根据手册页,“q”(应该是快速附加)实际上是“r”(即“使用替换”)的同义词,“c”创建存档(没有什么特别之处)并且“S”跳过生成一个索引(我们在最后再次使用“ranlib”来覆盖它。

有没有什么方便的方法,使用内置工具,让这个操作更快?如果“快速附加”模式有效,那可能就是我们想要的,但是唉。

0 投票
6 回答
124653 浏览

c++ - 将静态库链接到其他静态库

我有一小段代码依赖于许多静态库(a_1-a_n)。我想将该代码打包在一个静态库中,并使其可供其他人使用。

我的静态库,我们称之为 X,编译得很好。

我创建了一个使用 X 中的函数的简单示例程序,但是当我尝试将其链接到 X 时,我收到很多关于缺少库 a_1 - a_n 中的符号的错误。

有没有一种方法可以创建一个新的静态库 Y,其中包含 X 和 X 所需的所有功能(从 a_1 - a_n 中选择的位),以便我可以只分发 Y 以供人们将他们的程序链接到?


更新:

我看过只是用ar转储所有内容并制作一个 mega-lib,但是,最终包含许多不需要的符号(所有 .o 文件大约 700 MB,但是,静态链接的可执行文件是 7兆)。有没有一种好方法可以只包含实际需要的内容?


这看起来与如何将多个 C/C++ 库合并为一个?.

0 投票
5 回答
82872 浏览

linux - 可以在 Linux 上使用 .dll

问题:是否可以使用 .dll 文件在 linux 上编译程序?

这是怎么回事: 这个 .dll 将用于为第三方的某些专有软件编写 php 扩展。

背景与研究:

我得到了一个名为proprietary.lib. 我很好奇,因为我以前从未见过.lib扩展名,所以我输入了:

输出是:

我做了一些研究,发现这ar或多或少tar(事实上,我想在大多数 *nix 环境中tar已经被取代了)。ar

在检查ar手册页后,我看到了t option,它显示了该存档内容的表格列表。凉爽的。所以我输入:

并得到:

0 投票
1 回答
250 浏览

glibc - 构建 .a 文件时使用的 glibc 版本

有没有办法从 .a 文件中找出预期或在构建 .a 时使用的 glibc 版本?

0 投票
1 回答
651 浏览

unix - 静态库创建

一般来说,我们使用ar rcs命令在 unix 上创建一个静态库。

此处的手册页上说的 flag 's' 是什么意思

不要生成存档符号表。这可以通过几个步骤加快构建大型库的速度。生成的存档不能与链接器一起使用。为了构建符号表,您必须在最后一次执行 ar 时省略 S 修饰符,或者您必须在存档上运行 ranlib。

我对“生成的存档不能与链接器一起使用”这句话感到困惑。

我们必须在 ar 命令之后使用 ranlib 来创建静态库吗?ranlib 的目的是什么以及它是如何使用的?

0 投票
1 回答
233 浏览

bash - 用 ar 破坏现有文件

使用ar已存在的存档名称时,会生成以下消息:

现有存档名称是一个空文件(由 创建mktemp)。

无论如何,我想破坏那里的任何内容,任何现有文件的内容(无论是否ar)都不感兴趣。我该如何执行?

更新0

我目前正在使用rm "$libcpfs_a" && ar rcs "${libcpfs_a}" ${libcpfs_objs[*]}作为解决方法。

0 投票
1 回答
673 浏览

linux - 如何告诉 `gar` 或 `ar` 输出 `elf32-i386` 输出?

当我查看来自 的帮助输出时gar -h,它告诉我:

如何指示gar创建elf32-i386输出?

0 投票
8 回答
94131 浏览

linux - 如何将两个“ar”静态库合并为一个?

ar cr我有 2 个静态 Linux 库,由libabc.a和创建libxyz.a
我想将它们合并到一个静态库libaz.a中。
我怎样才能做到这一点。

我想创建一个合并的静态库,而不是将两个库都提供给应用程序的最终链接。