问题标签 [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 编译带有源代码文件的库存档?
TL;DR - 我需要用 test.o 编译 archive.a 来制作可执行文件。
背景 - 我正在尝试从我正在修改的软件包中调用单独的库中的函数,但该函数(字符串解析器)正在创建分段违规。库中肯定发生了故障,开发人员已要求提供发生错误的测试用例。与其让他尝试编译我正在处理的相当大的软件包,不如只给他发送一个调用适当函数的简单程序(希望死在同一个地方)。他的库也使用了几个系统库(lapack、cblas 等),因此链接需要满足我的所有想法。
我可以链接到创建他的库时创建的 .o 文件,但当然它们不会链接到适当的系统库。
这似乎应该是直截了当的,但这让我很困惑。
c - 使用单个头文件链接到由多个库和目标文件组成的静态库
我正在处理一个相当大且混乱的项目,我真的没有时间清理,我的任务是为它提供一个 API。我要做的是将所有丑陋的东西包装在一个静态库中,然后为它提供一个头文件。
但是当尝试使用头文件和库构建可执行文件时,我得到了一堆“未定义的引用”错误。我想如果我提供所有头文件,它会起作用,但我真的不想这样做。
现在makefile
看起来像这样(为简单起见略有改动):
我检查了libgiant_lib.a
档案,它似乎包含了它应该包含的所有库和目标文件。但是,链接它仍然不起作用。
我很确定我在这里遗漏了一些明显的东西......
c - 检测静态库是否为精简归档
将静态库链接为精简存档时,不会将 .o 文件复制到存档中,而是通过 .a 文件的相对路径引用它们。
如何检查给定的 .a 文件是否为精简存档?
c - 我的代码有什么问题?(在存档文件中打印文件名)
我正在尝试编写一个程序来从 Unix 打开存档文件,读取文件并打印存档中的文件以及文件名。下面是我的代码——它可以编译,但我在终端中得到了一些奇怪的输出——例如?;?U?。它应该只显示 2 个 txt 文件名。有人可以看看我的代码并就我所缺少的内容给我一些指导吗?谢谢!
编辑:我对我的代码进行了一些更改,但它仍然无法正常工作。非常感谢任何建议或帮助。
c++ - ar 无法创建存档:“文件格式无法识别”
我有这个makefile
不知何故(在我的 Linux 机器上),我得到了
ar --help 给出
文件 jackport.o
c - gcc在静态库中链接未解析符号的顺序是什么
在调试函数符号冲突问题时,我发现 gcc 的一个奇怪行为我无法理解,通过以下示例代码说明:
主程序
交流
公元前
编译:
执行:
我的问题是:
- 为什么
a
在main
函数中调用函数a in b.c
而不是a in a.c
? - 更改 library order:
gcc main.c libb.a liba.a
后,结果是一样的。为什么? - 为什么链接器在这种情况下不报告符号冲突?
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 文件列表。这是我的应用程序的编译命令:
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 自动生成的。
在此先感谢您的帮助!
c++ - 如何创建自动链接到动态库的静态库?
我维护我们的内部基础设施库——我们称之为libcluracan
。这个库必须是静态链接的,因为它不存在于使用代码的外部计算机上。
这意味着我不是libcluracan.so
使用链接器创建文件,而是libcluracan.a
使用ar
命令创建文件
现在我正在尝试向 中添加一些新功能libcluracan
,但它需要与外部库链接 - 特别-lfltk
是,但细节并不重要。重要的是我可以假设外部计算机有这个库(以及我需要的任何其他公开可用的库)。
最大的问题是我无法改变内部程序员编译(嗯,链接)他们的代码的方式。
如果我们一直在使用动态libcluracan.so
库,我只需将其添加-lfltk
到链接器并忘记它 - 程序员将继续链接-lcluracan
并-lfltk
自动获取。
我需要找到一种方法来对我们的静态libcluracan.a
库做同样的事情。
TL;博士
有没有办法创建一个在使用时.a
自动链接到另一个动态.so
库的静态库?
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: