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

linux - 使用 ar 创建的静态库具有分辨率为 1 s 的时间戳

我从单个目标文件创建一个静态库。生成的 .a 文件具有分辨率为一秒(截断到前一秒)的时间戳,而 .o 文件则没有。

实际上,它使 .a 文件看起来比 .o 文件旧,并且下次 I 时会重建 lib make

我听说 Mac 可能存在这样的问题,但我使用的是 Ubuntu,x64。

为了了解发生了什么,我做了一个更简单的项目来展示这种行为。但在这种情况下,一切都按我的预期工作:

它在那里工作,hello.a时间戳等于hello.o.

回到我原来的项目。我不知道有什么不同,但是库的时间戳在几秒钟后用零填充:

注意这里的时间戳libmyproj.a:10:03:59.000000000。

我已经尝试了这两个选项-U-Dto ar, to no av (不是我真的认为它应该有所作为)。

经过进一步调查,问题似乎取决于文件放置在哪个目录中:

  • 如果我复制~/code/myproj/myproj.o到 test dir 的位置~/tmp/ar_test/myproj.o并在ar -cvq libmyproj.a myproj.o 那里运行,则时间戳是正确的。

  • 如果我复制~/tmp/ar_test/hello.o到原始项目的位置~/code/myproj/hello.o并在ar -cvq libhello.a hello.o那里运行,则时间戳不正确。

换句话说:ar当我在时生成截断的时间戳~/code/myproj,但在我在时不生成~/tmp/ar_test

根据我所在的目录,什么可以使 lib 丢失时间戳的下半部分?

0 投票
3 回答
979 浏览

macos - 尝试在 OS X Yosemite 10.10.1 上编译 GnuPG-2.1.1

在尝试构建最新的 GnuPG(2.1.1现代)时,我的构建在尝试链接时失败t-stringhelpmake输出:

我不知道如何解决这个问题,因为libcommon它是源代码的一部分,所以它应该可以正常构建。当用CFLAGS="-m64"(-arch x86_64什么都不做) 构建时,我得到了这个:

我还重建了所有的 depandancies(就像我在 Mavericks 上构建的那样),除了pinentry,因为它找不到libiconv哪个也安装了。我的configure输出是它的目标Darwin (x86_64-apple-darwin14.0.0),所以这应该有效。我还获得了所有最新的先决条件,尝试将所有内容安装在自己的目录中(--prefix=/usr/local/gnupg-2.1.1),将所有依赖项和 GnuPG 构建为 32 位(再次,同样的错误失败),创建了一个单独的构建文件夹并尝试在其中构建,但到目前为止只有一件事解决了错误:查看libgpgrl.a构建方式 - 它是唯一的组件common/gpgrlhelp.c- 所以我cd进入g10并尝试构建,gpg2替换../common/libgpgrl.a../common/gpgrlhelp.olib common.a及其所有目标文件,用于所有不起作用的库。然后有些程序没有链接到libksba libgcryptand libassuan,所以我更改了 Makefile,以便它们可以链接。我现在可以很好地编译所有代码,我安装了所有东西,但是当我尝试运行时出现新错误gpg2

我的道路上有一切,即:

我可以在 Mavericks 上编译 GnuPG-2.0.22,但没有任何版本的 GnuPG 构建在 Yosemite 上。

请帮忙,我真的很困惑。

0 投票
1 回答
67 浏览

aix - CC 中未记录的标志

当使用新版本的 Informix-4GL 编译文件时,它会启动以下命令,将生成的对象链接到可执行文件中。

如果有一个未定义的符号,它会给出错误,但会生成文件teste,尽管没有执行权限。这种行为与以前的版本不同,它与 make 配合得不好:如果我做了 2 次,第一次它会给出 undef 错误,但在第二次它什么也不做,因为可执行文件已经存在。

如果我取消该-bh:8选项,它会像以前一样工作(不生成 exec 文件)。

有谁知道这个选项/标志:-bh:8?我在 cc 文档中找不到它。

0 投票
1 回答
5336 浏览

c - C 静态库无法与 librt 链接

我必须创建一个静态库(创建动态库不是一个选项),并且我在这个静态库中有一个函数,它使用timer_create例如time.h这样的东西:

一些lib.h:

一些lib.c:

代码实际上是没有意义的,只是需要链接到 librt 来说明我的问题,如下所示:

在我编译 somelib.c 之后:

并制作静态库:

链接时出现以下错误:

返回:

这是我的问题的最小示例。我不确定这是否可以解决,因为我的理解是,静态库在创建时必须知道 librt 的位置,并且由于它是动态的,因此如果不链接静态库是不可能的librt 的版本。我仍然不经常使用静态库,所以我想知道是否有办法做这样的事情。

编译器版本:gcc 4.8.1 没有设置其他标志。

0 投票
0 回答
106 浏览

makefile - Why is object file empty after archiving when building in parallel with GNU Make?

I have a problem with the archiver not seeming to archive the object files fully correctly every time when building in parallel. I have built the project with make -j32

If I investigate the archive:

Also running the program nm shows no symbols.

However, when I investigate the object file in the obj-directory the file has symbols and a nonzero size so it seems that the archiver has not archived the lib correctly.

My makefile for building the libs looks as follows:

As you can see I even use a file lock to make sure that only one thread can archive the lib at the same time. So why is the object file empty? I have specified the lib to be archived only when the object file has finished building but it seems that there is a race condition with the archiver starting archiving before the last object file is fully built. So what could be the cause for this behaviour?

I should add that it mostly seems to be one file in the library which gets this problem but it can be other files aswell.

0 投票
1 回答
365 浏览

c - 用 pthread 库链接我写的一个库

这实际上是任务的一部分。基本上,我们需要编写一个库,它将与教授编写的测试程序相关联,如下所示:

问题是 libexample 使用 POSIX 信号量,在生成最终可执行文件时需要与 pthread 库链接。在不改变测试程序编译方式的情况下,有没有办法用libexample.a打包pthread库?

谢谢!

0 投票
0 回答
116 浏览

haskell - Cabal 未能构建详细的 0.9 测试套件

我正在尝试使用单个测试套件构建一个包:

这是发生的事情:

我正在使用带有 Haskell 平台 2014.2.0.0 的 Windows 8.1 64 位。我已经安装了 MSYS,路径上唯一的 MinGW 是 GHC。此外,所有 git 二进制文件都在路径上的 MSYS 和 MinGW 之后,因此它们不会冲突。任何建议表示赞赏。


更新:使用type: exitcode-stdio-1.0.

0 投票
3 回答
27620 浏览

c - ar 中的“rcs”选项有什么作用?

我确实阅读了 man 文件,但它没有帮助。rcs似乎是传递给 ar 的最流行的选项,但对我来说含义不是很清楚。

所以c意味着创建一个新的存档,但是为什么要使用r?这似乎代表“替换”?该s选项将对输出做什么?

0 投票
1 回答
1633 浏览

c++ - 有没有办法查看 C/C++ 存档 (.a) 中的函数?

我们有一种情况(简化):

  1. test()存在于source.c
  2. source.c编译为object.o
  3. object.o链接到存档archive.a
  4. archive.a被编译成finalbinary

我们正在尝试将名称更改为test()其他名称。但是(4)中的链接步骤表明新方法签名不存在。使用gobjdump我们可以肯定地看到新的重命名方法存在于object.o(它与其他方法在同一个 SECT 中并且不是 UND)。

我们可以肯定地看到object.o存​​在于archive.a. 但是,我们不确定(由于复杂的构建系统)archive.a包含该方法。

TL;DR:有没有办法查看存档文件内部并列出其中特定二进制对象的功能?

0 投票
2 回答
108 浏览

file - 将输出重定向到“文件”命令

有什么方法可以让file命令从中获取输入stdin?具体来说,我正在尝试获取存档中文件的文件类型,并尝试在单个命令中完成。我试过这个:

但这不起作用。