问题标签 [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 回答
1670 浏览

c++ - 如何将用于分析的编译添加到静态库?

我的项目目前有一个静态链接的库(用 gcc 编译并用 ar 链接),但我目前正在尝试用 gprof 分析我的整个项目,我还想在其中分析这个静态链接的库。有什么办法可以做到这一点吗?

Gprof 要求您将 -pg 提供给 GCC 以进行编译,并将 -pg 提供给链接器。但是,当将 -pg 添加到它的标志列表中时,ar 会抱怨。

0 投票
3 回答
629 浏览

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

我正在编写一个需要处理 XML 的静态库。我希望它包含开箱即用所需的所有内容,但我不知道如何使其他静态库链接到它,即 libxml2。

我将-c标志传递给 gcc 以生成.o该标志,ar然后用于创建库。我必须通过什么神奇的标志组合才能让我的静态库吞下 libxml2?

0 投票
5 回答
14959 浏览

c++ - 为存档而构建的静态库,它不是被链接的体系结构 (x86_64)

当我尝试编译两个不同的程序时,我遇到了似乎相同的问题。他们每个人都首先创建一个静态库,然后是链接该库的主应用程序。我正在使用 gcc 4.7.2 开发 Mac OS Mavericks。

程序 1

这就是我运行时发生的事情make

首先,libfeat.a创建了库,但我收到警告:

然后,在编译应用程序时,它说它不能使用该库,因为它不是为相同的架构 (x86_64) 构建的:

如果我运行lipo,我会得到这个:

节目二

我在使用不同的程序时遇到了同样的问题:首先创建一个库,然后再使用它。

这是创建库时的输出:

这是应用程序:

在这种情况下,lipo确实告诉我该库的体系结构是 x86_64:

这是怎么回事?

0 投票
1 回答
306 浏览

c - 针对静态库编译的麻烦

我创建了一个静态库 , libstuff.a,gccar. 我已经将库安装/custom/lib/dir//custom/include/dir/. 当我尝试针对存档编译另一个应用程序时,我遇到了问题。

我试图编译的应用程序基本上使用gcc -L/custom/lib/dir/ -I/custom/include/dir/ -lstuff.

当我尝试编译时,我收到关于我在中声明stuff.h和定义的函数的错误stuff.c

如果我libstuff.a/custom/lib/dir/编译器中删除抱怨/usr/bin/ld: cannot find -lstuff。如果我把它放回去,它不会抱怨。所以它正确地找到了存档。

#include "stuff.h"如果我从gcc中删除该行代码,则会main.c抱怨stuff_init未定义,因此它可以正确找到标头。

如果我运行nm libstuff.a,输出包括0000000000000000 T stuff_init. 所以函数是在归档文件中定义的。

那么我做错了什么?

0 投票
1 回答
601 浏览

static-libraries - 从库中提取多个同名对象

我有一个.a文件,其中包含许多具有相同名称的对象(utils.o例如)。ar当实用程序仅对名称进行操作时,如何提取这些对象?

0 投票
1 回答
7048 浏览

c - 覆盖静态库中的弱符号

我想从多个来源为我的项目制作一个静态 .a 库,其中一些定义了弱函数,而另一些则实现了它们。假设我有:

lib1.c:

lib2.c:

然后我想把它们放到一个库中,这样最终应用程序看起来是透明的

但是现在myHandlerlibhandlers 中有 2 个符号:

然后在使用lib时,链接弱引用。我目前唯一的解决方案是不包含在库中,lib2.c而是将其作为源添加到应用程序的 Makefile 中……这并不令人满意,因为我只想提供几个库来使用而不是一大堆文件。

--whole-archive选项也不令人满意,因为我在嵌入式系统上工作并且我不想包含所有我不需要的东西。

有没有办法编译库,以便在提供强符号时弱符号消失?

注意:我正在使用 arm-none-eabi-gcc v4.8

0 投票
1 回答
1412 浏览

c++ - 限制链接对象的全局符号范围

我在存档文件中有一个 C 库,clib.a. 我已经为它编写了一个 C++ 包装器cpp.o,并希望将其用作静态库:

clib.a除非包含正确的标头,否则链接到此的代码将无法直接使用这些内容。但是,如果有人巧合地创建了一个合适的原型——例如void myCoincidentallyNamedGlobalFunction()——我担心会应用 哪个定义。myCoincidentallyNamedGlobalFunction

由于符号 fromclib.a只需要在 中访问cpp.o,而不是任何链接到cppwrap.a,有没有办法完全隐藏它们,以免发生冲突(所以即使包含 clib 标头也会失败)?

0 投票
1 回答
581 浏览

static-libraries - 嵌套档案的目的

ar可以创建一个.a包含另一个.a文件的文件,这样的输出ar -t whatever.a如下所示:

但是,如果随后链接此档案,则.oin 中的符号someotherarchive.a将无法通过foo.o. 这可以通过在创建时使用Tswitch 进行展平来解决ar,但这也会创建一个精简的存档。由于似乎没有 flatten-but-don't-thin 选项,因此有必要先从中提取someotherarchive.a然后.o独立链接 s 以创建包含以下内容的内容:

提出问题,如果把一个.a放在另一个里面.a就无法访问,这样做的目的是什么?

0 投票
1 回答
3292 浏览

c - ar: crs: 没有这样的文件或目录

我正在尝试安装 SCIP 优化套件 3.1.0 版

http://scip.zib.de/download.php?fname=scipoptsuite-3.1.0.tgz

该软件是通过在 scipoptsuite-3.1.0 目录中键入“make”命令来编译的。该包包含三个组成包(SCIP、soplex 和 zimpl)。通用包(scipoptsuite)有一个makefile,三个组成包也有一个makefile。在编译 zimpl 时我遇到了很大的困难。

尝试使用 zimpl makefile 中的代码进行编译时会发生错误。尝试生成一个库并将目标文件存储在该库中。

我现在要提供一些相关的代码来解决这个问题。

以下是一些关键定义:

这是导致错误的关键代码段:

这会生成以下错误消息:

我特别想提请您注意该代码段中的以下行:

我不确定该行的“crs”方面指的是什么,甚至不确定为什么会产生任何错误。对此问题的任何帮助将不胜感激。在这一点上,我真的很难过。

0 投票
1 回答
707 浏览

c - C 档案(库)与 clang 链接器的基本使用

我有一个主程序:

和一个单独的文件,foo.c其中包含我对变量的定义a

如果我这样构建:

一切都很好。但是,如果我执行以下操作:

我收到一个我不明白的警告

所以我检查了我的图书馆,确保我的符号在那里

然后我做

我收到以下错误

我错过了什么?