具有同名目标文件的静态库 (ar)

2024-04-13

一点背景。假设我有源文件,它们需要最终存放在静态库中。假设有两个 cpp 文件a.cpp and a.cpp位于两个不同的子目录中。像这样的事情:

foo/a.h
foo/a.cpp
bar/a.h
bar/a.cpp

他们的内容并不冲突,而且完全不同。文件名是一样的。

现在,编译时我最终得到两个a.o当然是文件。

gcc -c foo/a.cpp -o foo/a.o
gcc -c bar/a.cpp -o bar/a.o

如果我现在创建一个静态库

ar rcs libfoobar.a foo/a.o bar/a.o

我可以看到静态库中的两个文件都在运行nm libfoobar.a。看起来不错。

Problem

我看到的问题是如果我运行ar单独命令foo/a.o and bar/a.o将它们放在同一个静态库中。现在后一个目标文件将覆盖前一个,所以运行时nm libfoobar.a我只是在库中看到了后一个对象。我猜这是由于相同的目标文件名造成的情况。

创建静态库时ar,我应该总是一次性组合所有对象还是运行也可以ar多次收集一部分对象,最终都在同一个静态库中?对于这个例子,我可以看到前者的作品,但看不到后者。

当一个人a.cpp更改并且静态库需要更改?将要ar找到正确的a.cpp去图书馆换?

这只是一个小例子,但请考虑一个包含许多文件且有些文件具有相同名称的大型项目。如果您现在想创建一个库,您也可能会遇到这种情况。

一般来说,这只是对库的组成方式、文件的命名方式的组织不善,还是还有其他东西可以让事情正常工作?


你必须想一想ar作为非常古老的文件存档器。它甚至不知道有关归档目录的任何信息。 (ar档案是扁平的)

(男人):ar - create, modify, and extract from archives

人 ar,选项r:

r 将文件成员...插入存档(带替换)。此操作与 q 的不同之处在于,如果满足以下条件,则删除任何先前存在的成员:他们的名字与添加的名字相匹配.

尝试运行一个ar t libfoobar.a你只会看到a.o文件因为ar未在存档中存储目录名称。

因此,您必须以不同的方式命名放入 ar 存档中的所有目标文件(UPD)如果你想用 ar 更新库中的一些目标文件

The ar rcs lib.a foo/a.o bar/a.o替换 lib.a 中找到的 a.o,但不会检查添加的文件是否存在名称冲突。

其他情况:ar rcs lib.a foo/a.o and ar rcs lib.a bar/a.o将在存档中存储第一个 a.o,然后是第二个ar会发现年纪大的a.o存档并替换旧文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有同名目标文件的静态库 (ar) 的相关文章

随机推荐

  • 如何在Python中隐藏控制台窗口?

    我正在用 Python 编写一个 IRC 机器人 我希望为 Linux 和 Windows 制作独立的二进制文件 主要是我希望当机器人启动时 控制台窗口应该隐藏 并且用户不应该看到该窗口 我能为此做些什么呢 只需将其保存为 pyw扩大 这将
  • 将一个变量设置为等于另一个变量[重复]

    这个问题在这里已经有答案了 我有一些关于在 JavaScript 中将变量设置为等于另一个变量的问题 假设我们创建一个对象 a并设置b a var a fname Jon lname Smith age 50 var b a 我明白如果我们
  • 音色 `set-config!` 已经改变了数量,因此不知道如何使用它来将 std err/out 输出到文件

    我正在尝试使用https github com ptaoussanis timbre https github com ptaoussanis timbre记录到文件而不是控制台 以下是我找到的一些有关如何执行此操作的文档 The defa
  • 为 libstdc++ 生成 CTAGS(来自当前 GCC)

    I know 你完成了我 https github com Valloric YouCompleteMe基于 LLVM 但我想使用OmniCppComplete http www vim org scripts script php scr
  • 操作码的十六进制值

    我创建了一个非常简单的汇编程序 可以在 DOS 中打印字母 a 我在十六进制编辑器中打开它 结果是这样的 汇编代码 mov ah 2 mov dx a int 21h 十六进制代码 B4 02 B2 61 CD 21 我想了解它是如何生成的
  • 在 pdf 中按宽度调整内容

    渲染为 pdf 时 我需要 html 页面为打印宽度的 100 否则内容会被切断 是否有捷径可寻 我想出了一个解决方法 它在渲染后获取 html 宽度 然后设置缩放系数以强制正确的宽度 var page require webpage cr
  • 如何确定视图的列是派生的还是常量?

    假设我有下表 create table t Item ItemID int not null identity 1 1 constraint PK Item primary key Description varchar 256 not n
  • Apache AVRO 与休息

    我正在评估将 Apache AVRO 用于我的 Jersey REST 服务 我将 Springboot 与 Jersey REST 结合使用 目前我接受 JSON 作为输入 并使用 Jackson 对象映射器将其转换为 Java Pojo
  • Laravel 4:在包中部署自定义 artisan 命令

    我开发了一些自定义 artisan 命令 以便更轻松地与我的包一起使用 是否可以将 artisan 命令包含到包中以便于部署 如果可以 怎样做 Thanks 在你的包结构中有一个命令集
  • 如何获取包含越界对象的绘图尺寸

    我可以这样计算图的高度 library ggplot2 library egg library gridExtra g lt ggplot iris aes x Species y Petal Length stat summary geo
  • 如何在 Laravel 中检索 Mailgun 传递的消息

    在我的 Node js 应用程序中 我遵循了 Mailgun 文档https documentation mailgun com en latest quickstart sending html send with smtp or api
  • GitHub 页面和相对路径

    我创建了一个gh pages我正在 GitHub 上开发的一个项目的分支 我使用 Sublime text 在本地创作网站 我的问题是 当将其推送到 GitHub 时 所有指向 javascrips 图像和 css 文件的链接都无效 例如
  • 如何存储我的网络应用程序的指标?

    我需要为我的网络应用程序存储更多指标 需要随着时间的推移跟踪和比较用户行为和其他条件 有些记录有与之关联的时间戳 有些则没有 因此 按需查询指标可能并不总是合适 我认为需要的是我编写然后存储在某个地方 数据库 文件 的某些分析查询 通过 c
  • find_package 用于使用 Visual Studio 进行调试和发布

    我正在为如何将第三方库包含在我的 cmake 项目中而绞尽脑汁 目前 我构建了 Poco 和其他一堆 它们都生成各自的 Config cmake 我将其与 find package 一起使用 我有一个包装构建脚本 用于构建所有依赖项并将它们
  • 将 Scala Iterable[tuple] 转换为 RDD

    我有一个元组列表 String String Int Double 我想将其转换为 Spark RDD 一般来说 如何将 Scala Iterable a1 a2 a3 an 转换为 Spark RDD 有几种方法可以做到这一点 但最直接的
  • M2Eclipse,META-INF/MANIFEST.MF

    我在 Eclipse 中使用 M2Eclipse 插件 而且不知道什么原因 每次在Eclipse中导入Maven项目时 总是生成一个空的 src main META INF MANIFEST MF 文件 jar 打包的项目 src main
  • Web API 2、OWIN 身份验证、SignOut 不注销

    我正在做一些研究 以期使用 Bearer 令牌作为身份验证机制 即 AngularJS UI 通过 Web API 2 项目中的 OWIN 进行身份验证 我的登录工作正常 角色信息等一切都很好 但我无法获取用于注销的令牌 我的启动配置是这样
  • 在这种情况下是否可以创建一个最小完美哈希函数?

    我想创建一个哈希映射 或其他结构 如果您有任何建议 来存储键值对 这些键将在创建地图的同时一次性插入 但我不知道键是什么 任意长度的字符串 直到运行时 当我需要创建地图时 我正在解析这样的查询字符串 x 100 name bob color
  • Gekko优化包和numpy反函数

    我使用 Gekko 为一组反应动力学选择 A 最优实验 目标函数是最小化迹 inv Z Z 其中 Z 是通过将其参数周围的 ODE 线性化而计算出的尺度灵敏度矩阵 正如您所看到的 目标函数涉及 Z Z 的倒数 我使用了 numpy 甚至 s
  • 具有同名目标文件的静态库 (ar)

    一点背景 假设我有源文件 它们需要最终存放在静态库中 假设有两个 cpp 文件a cpp and a cpp位于两个不同的子目录中 像这样的事情 foo a h foo a cpp bar a h bar a cpp 他们的内容并不冲突 而