问题标签 [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.
c - 组合静态库
假设我有三个C静态库,说libColor.a取决于 *libRGB.*a ,而后者又取决于libPixel.a。据说库libColor.a依赖于库libRGB.a,因为在 libColor.a 中有一些对libRGB.a中定义的一些符号的引用。如何将上述所有库组合成一个独立的新libNewColor.a?
独立意味着新库应该定义所有符号。因此,在链接时,我只需要提供-lNewColor。新库的大小应该是最小的,即它不应该包含libColor.a等未使用的 libRGB.a 中的任何符号。我在ar命令中使用了各种选项(用于创建和更新静态库/档案) )。
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 来生成静态库。
任何想法或建议将不胜感激。
提前致谢。
performance - 提高 ar 归档性能
我有一个包含大量自动生成代码的项目,我们在链接到最终可执行文件之前将其构建到静态库中。我们使用 gcc/gnat 5.04a 的文件太多了,我们不得不将作业拆分成批处理并多次调用 ar 来构建库(为了避免命令行长度限制),例如:
我们正在寻找潜在的速度改进。看起来,随着存档的增长,每批需要的时间越来越长,大概是因为在添加对象之前需要搜索更多(更新)。这似乎就是为什么删除存档比仅更新旧存档更快的原因。为了追求更快的速度,我们在 ar 命令中使用了标志“qcS”。根据手册页,“q”(应该是快速附加)实际上是“r”(即“使用替换”)的同义词,“c”创建存档(没有什么特别之处)并且“S”跳过生成一个索引(我们在最后再次使用“ranlib”来覆盖它。
有没有什么方便的方法,使用内置工具,让这个操作更快?如果“快速附加”模式有效,那可能就是我们想要的,但是唉。
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++ 库合并为一个?.
linux - 可以在 Linux 上使用 .dll
问题:是否可以使用 .dll 文件在 linux 上编译程序?
这是怎么回事: 这个 .dll 将用于为第三方的某些专有软件编写 php 扩展。
背景与研究:
我得到了一个名为proprietary.lib
. 我很好奇,因为我以前从未见过.lib
扩展名,所以我输入了:
输出是:
我做了一些研究,发现这ar
或多或少tar
(事实上,我想在大多数 *nix 环境中tar
已经被取代了)。ar
在检查ar
手册页后,我看到了t option
,它显示了该存档内容的表格列表。凉爽的。所以我输入:
并得到:
glibc - 构建 .a 文件时使用的 glibc 版本
有没有办法从 .a 文件中找出预期或在构建 .a 时使用的 glibc 版本?
unix - 静态库创建
一般来说,我们使用ar rcs
命令在 unix 上创建一个静态库。
此处的手册页上说的 flag 's' 是什么意思
不要生成存档符号表。这可以通过几个步骤加快构建大型库的速度。生成的存档不能与链接器一起使用。为了构建符号表,您必须在最后一次执行 ar 时省略 S 修饰符,或者您必须在存档上运行 ranlib。
我对“生成的存档不能与链接器一起使用”这句话感到困惑。
我们必须在 ar 命令之后使用 ranlib 来创建静态库吗?ranlib 的目的是什么以及它是如何使用的?
bash - 用 ar 破坏现有文件
使用ar
已存在的存档名称时,会生成以下消息:
现有存档名称是一个空文件(由 创建mktemp
)。
无论如何,我想破坏那里的任何内容,任何现有文件的内容(无论是否ar
)都不感兴趣。我该如何执行?
更新0
我目前正在使用rm "$libcpfs_a" && ar rcs "${libcpfs_a}" ${libcpfs_objs[*]}
作为解决方法。
linux - 如何告诉 `gar` 或 `ar` 输出 `elf32-i386` 输出?
当我查看来自 的帮助输出时gar -h
,它告诉我:
如何指示gar
创建elf32-i386
输出?
linux - 如何将两个“ar”静态库合并为一个?
ar cr
我有 2 个静态 Linux 库,由libabc.a
和创建libxyz.a
。
我想将它们合并到一个静态库libaz.a
中。
我怎样才能做到这一点。
我想创建一个合并的静态库,而不是将两个库都提供给应用程序的最终链接。