问题标签 [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 投票
1 回答
5314 浏览

c - 如何使用 gcc 编译带有源代码文件的库存档?

TL;DR - 我需要用 test.o 编译 archive.a 来制作可执行文件。

背景 - 我正在尝试从我正在修改的软件包中调用单独的库中的函数,但该函数(字符串解析器)正在创建分段违规。库中肯定发生了故障,开发人员已要求提供发生错误的测试用例。与其让他尝试编译我正在处理的相当大的软件包,不如只给他发送一个调用适当函数的简单程序(希望死在同一个地方)。他的库也使用了几个系统库(lapack、cblas 等),因此链接需要满足我的所有想法。

我可以链接到创建他的库时创建的 .o 文件,但当然它们不会链接到适当的系统库。

这似乎应该是直截了当的,但这让我很困惑。

0 投票
1 回答
182 浏览

c - 使用单个头文件链接到由多个库和目标文件组成的静态库

我正在处理一个相当大且混乱的项目,我真的没有时间清理,我的任务是为它提供一个 API。我要做的是将所有丑陋的东西包装在一个静态库中,然后为它提供一个头文件。

但是当尝试使用头文件和库构建可执行文件时,我得到了一堆“未定义的引用”错误。我想如果我提供所有头文件,它会起作用,但我真的不想这样做。

现在makefile看起来像这样(为简单起见略有改动):

我检查了libgiant_lib.a档案,它似乎包含了它应该包含的所有库和目标文件。但是,链接它仍然不起作用。

我很确定我在这里遗漏了一些明显的东西......

0 投票
1 回答
1543 浏览

c - 检测静态库是否为精简归档

将静态库链接为精简存档时,不会将 .o 文件复制到存档中,而是通过 .a 文件的相对路径引用它们。

如何检查给定的 .a 文件是否为精简存档?

0 投票
2 回答
208 浏览

c - 我的代码有什么问题?(在存档文件中打印文件名)

我正在尝试编写一个程序来从 Unix 打开存档文件,读取文件并打印存档中的文件以及文件名。下面是我的代码——它可以编译,但我在终端中得到了一些奇怪的输出——例如?;?U?。它应该只显示 2 个 txt 文件名。有人可以看看我的代码并就我所缺少的内容给我一些指导吗?谢谢!

编辑:我对我的代码进行了一些更改,但它仍然无法正常工作。非常感谢任何建议或帮助。

0 投票
1 回答
13856 浏览

c++ - ar 无法创建存档:“文件格式无法识别”

我有这个makefile

不知何故(在我的 Linux 机器上),我得到了

ar --help 给出

文件 jackport.o

0 投票
2 回答
1373 浏览

c - gcc在静态库中链接未解析符号的顺序是什么

在调试函数符号冲突问题时,我发现 gcc 的一个奇怪行为我无法理解,通过以下示例代码说明:

主程序

交流

公元前

编译:

执行:

我的问题是:

  • 为什么amain函数中调用函数a in b.c而不是a in a.c
  • 更改 library order:gcc main.c libb.a liba.a后,结果是一样的。为什么?
  • 为什么链接器在这种情况下不报告符号冲突?
0 投票
1 回答
309 浏览

c++ - 使用 c++ 合并静态库时出现未定义的引用错误

假设我的应用程序中需要 libA.a。libA.a 需要 libB.a 本身,我需要在我的应用程序中静态链接到它们。为了消除这种情况,我将这两个(libA.a 和 libB.a)合并为 libAB.a(这是使用 ar 工具完成的)。还没有问题。

当我想运行我的应用程序(链接到 libAB.a)时,编译器开始抱怨对 libA 中使用 libB 的方法的未定义引用!除了 libAB.a 之外,当我将 app 链接到 libB.a 时,一切正常!根据文件大小,libAB.a 似乎是 libA 和 libB 合并的结果,但在编译时似乎只有 libA 可用于应用程序。

这是合并命令:

Foundation.txt 包含将创建 .a 文件的 .o 文件列表。这是我的应用程序的编译命令:

0 投票
2 回答
1610 浏览

c - OS X 链接器无法从仅包含变量的 C 文件中找到符号

在将 C 库从 Linux (Ubuntu) 移植到 OS X 时,链接器出现问题。C 代码是从 Matlab 自动生成的,所以理想情况下我不想更改代码本身。

问题似乎出在一个 C 文件中,该文件仅包含未初始化的变量声明,然后由其他 C 文件 EXTERNed 以实现 Matlab 算法。OS X 链接器显然无法识别此文件中的符号。相同的源代码在 Linux 上运行良好,因此我想了解 OS X 链接器的行为方式有何不同,以及是否可以将标志传递给它以更改行为。

静态库构建时没有错误/警告。但是在构建引用静态库的应用程序时,会抛出以下错误消息(在 OS X 上):

'nm' 表明 libtestlibrary.a 确实包含符号 _my_var。

下面是来自 Matlab 的代码的简化版本。

库代码:

库构建命令:

申请代码:

应用程序构建命令:

如果我将 data.c 中的定义更改为“int my_var=0”,以便初始化变量,那么库和应用程序在 Linux 和 OS X 上都可以正确构建。但是,正如我上面所说,我不想要更改代码,因为它是从 Matlab 自动生成的。

在此先感谢您的帮助!

0 投票
1 回答
250 浏览

c++ - 如何创建自动链接到动态库的静态库?

我维护我们的内部基础设施库——我们称之为libcluracan。这个库必须是静态链接的,因为它不存在于使用代码的外部计算机上。

这意味着我不是libcluracan.so使用链接器创建文件,而是libcluracan.a使用ar命令创建文件

现在我正在尝试向 中添加一些新功能libcluracan,但它需要与外部库链接 - 特别-lfltk是,但细节并不重要。重要的是我可以假设外部计算机有这个库(以及我需要的任何其他公开可用的库)。

最大的问题是我无法改变内部程序员编译(嗯,链接)他们的代码的方式。

如果我们一直在使用动态libcluracan.so库,我只需将其添加-lfltk到链接器并忘记它 - 程序员将继续链接-lcluracan-lfltk自动获取。

我需要找到一种方法来对我们的静态libcluracan.a库做同样的事情。

TL;博士

有没有办法创建一个在使用时.a自动链接到另一个动态.so库的静态库?

0 投票
1 回答
4892 浏览

c++ - cmake os x failure 没有特定的存档成员

我有一个简单的 cmake 项目,我无法在 OS X 10.8.4 上编译。cmake/make 过程在 Linux 上运行良好,但在 OS XI 上出现此错误:

我在两个平台上都使用 Eclipse CDT4 Generator Unix MakeFile。这似乎与两个系统上的 ar 之间的区别有关。但是,我在谷歌上找不到太多可以帮助我解决问题的方法。

这里有更多信息给你

src/CMakeList.txt

src/lib/CMakeList.txt

src/test/CMakeLists.txt: