问题标签 [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++ - 如何将用于分析的编译添加到静态库?
我的项目目前有一个静态链接的库(用 gcc 编译并用 ar 链接),但我目前正在尝试用 gprof 分析我的整个项目,我还想在其中分析这个静态链接的库。有什么办法可以做到这一点吗?
Gprof 要求您将 -pg 提供给 GCC 以进行编译,并将 -pg 提供给链接器。但是,当将 -pg 添加到它的标志列表中时,ar 会抱怨。
c++ - 将静态库与其他静态库链接
我正在编写一个需要处理 XML 的静态库。我希望它包含开箱即用所需的所有内容,但我不知道如何使其他静态库链接到它,即 libxml2。
我将-c
标志传递给 gcc 以生成.o
该标志,ar
然后用于创建库。我必须通过什么神奇的标志组合才能让我的静态库吞下 libxml2?
c++ - 为存档而构建的静态库,它不是被链接的体系结构 (x86_64)
当我尝试编译两个不同的程序时,我遇到了似乎相同的问题。他们每个人都首先创建一个静态库,然后是链接该库的主应用程序。我正在使用 gcc 4.7.2 开发 Mac OS Mavericks。
程序 1
这就是我运行时发生的事情make
:
首先,libfeat.a
创建了库,但我收到警告:
然后,在编译应用程序时,它说它不能使用该库,因为它不是为相同的架构 (x86_64) 构建的:
如果我运行lipo
,我会得到这个:
节目二
我在使用不同的程序时遇到了同样的问题:首先创建一个库,然后再使用它。
这是创建库时的输出:
这是应用程序:
在这种情况下,lipo
确实告诉我该库的体系结构是 x86_64:
这是怎么回事?
c - 针对静态库编译的麻烦
我创建了一个静态库 , libstuff.a
,gcc
和ar
. 我已经将库安装/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
. 所以函数是在归档文件中定义的。
那么我做错了什么?
static-libraries - 从库中提取多个同名对象
我有一个.a
文件,其中包含许多具有相同名称的对象(utils.o
例如)。ar
当实用程序仅对名称进行操作时,如何提取这些对象?
c - 覆盖静态库中的弱符号
我想从多个来源为我的项目制作一个静态 .a 库,其中一些定义了弱函数,而另一些则实现了它们。假设我有:
lib1.c:
lib2.c:
然后我想把它们放到一个库中,这样最终应用程序看起来是透明的
但是现在myHandler
libhandlers 中有 2 个符号:
然后在使用lib时,链接弱引用。我目前唯一的解决方案是不包含在库中,lib2.c
而是将其作为源添加到应用程序的 Makefile 中……这并不令人满意,因为我只想提供几个库来使用而不是一大堆文件。
该--whole-archive
选项也不令人满意,因为我在嵌入式系统上工作并且我不想包含所有我不需要的东西。
有没有办法编译库,以便在提供强符号时弱符号消失?
注意:我正在使用 arm-none-eabi-gcc v4.8
c++ - 限制链接对象的全局符号范围
我在存档文件中有一个 C 库,clib.a
. 我已经为它编写了一个 C++ 包装器cpp.o
,并希望将其用作静态库:
clib.a
除非包含正确的标头,否则链接到此的代码将无法直接使用这些内容。但是,如果有人巧合地创建了一个合适的原型——例如void myCoincidentallyNamedGlobalFunction()
——我担心会应用 哪个定义。myCoincidentallyNamedGlobalFunction
由于符号 fromclib.a
只需要在 中访问cpp.o
,而不是任何链接到cppwrap.a
,有没有办法完全隐藏它们,以免发生冲突(所以即使包含 clib 标头也会失败)?
static-libraries - 嵌套档案的目的
ar
可以创建一个.a
包含另一个.a
文件的文件,这样的输出ar -t whatever.a
如下所示:
但是,如果随后链接此档案,则.o
in 中的符号someotherarchive.a
将无法通过foo.o
. 这可以通过在创建时使用T
switch 进行展平来解决ar
,但这也会创建一个精简的存档。由于似乎没有 flatten-but-don't-thin 选项,因此有必要先从中提取someotherarchive.a
然后.o
独立链接 s 以创建包含以下内容的内容:
提出问题,如果把一个.a
放在另一个里面.a
就无法访问,这样做的目的是什么?
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”方面指的是什么,甚至不确定为什么会产生任何错误。对此问题的任何帮助将不胜感激。在这一点上,我真的很难过。
c - C 档案(库)与 clang 链接器的基本使用
我有一个主程序:
和一个单独的文件,foo.c
其中包含我对变量的定义a
:
如果我这样构建:
一切都很好。但是,如果我执行以下操作:
我收到一个我不明白的警告
所以我检查了我的图书馆,确保我的符号在那里
然后我做
我收到以下错误
我错过了什么?