问题标签 [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.
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
和-D
to 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 丢失时间戳的下半部分?
macos - 尝试在 OS X Yosemite 10.10.1 上编译 GnuPG-2.1.1
在尝试构建最新的 GnuPG(2.1.1现代)时,我的构建在尝试链接时失败t-stringhelp
。make
输出:
我不知道如何解决这个问题,因为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.o
这lib common.a
及其所有目标文件,用于所有不起作用的库。然后有些程序没有链接到libksba
libgcrypt
and libassuan
,所以我更改了 Makefile,以便它们可以链接。我现在可以很好地编译所有代码,我安装了所有东西,但是当我尝试运行时出现新错误gpg2
:
我的道路上有一切,即:
我可以在 Mavericks 上编译 GnuPG-2.0.22,但没有任何版本的 GnuPG 构建在 Yosemite 上。
请帮忙,我真的很困惑。
aix - CC 中未记录的标志
当使用新版本的 Informix-4GL 编译文件时,它会启动以下命令,将生成的对象链接到可执行文件中。
如果有一个未定义的符号,它会给出错误,但会生成文件teste
,尽管没有执行权限。这种行为与以前的版本不同,它与 make 配合得不好:如果我做了 2 次,第一次它会给出 undef 错误,但在第二次它什么也不做,因为可执行文件已经存在。
如果我取消该-bh:8
选项,它会像以前一样工作(不生成 exec 文件)。
有谁知道这个选项/标志:-bh:8
?我在 cc 文档中找不到它。
c - C 静态库无法与 librt 链接
我必须创建一个静态库(创建动态库不是一个选项),并且我在这个静态库中有一个函数,它使用timer_create
例如time.h
这样的东西:
一些lib.h:
一些lib.c:
代码实际上是没有意义的,只是需要链接到 librt 来说明我的问题,如下所示:
在我编译 somelib.c 之后:
并制作静态库:
链接时出现以下错误:
返回:
这是我的问题的最小示例。我不确定这是否可以解决,因为我的理解是,静态库在创建时必须知道 librt 的位置,并且由于它是动态的,因此如果不链接静态库是不可能的librt 的版本。我仍然不经常使用静态库,所以我想知道是否有办法做这样的事情。
编译器版本:gcc 4.8.1 没有设置其他标志。
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.
c - 用 pthread 库链接我写的一个库
这实际上是任务的一部分。基本上,我们需要编写一个库,它将与教授编写的测试程序相关联,如下所示:
问题是 libexample 使用 POSIX 信号量,在生成最终可执行文件时需要与 pthread 库链接。在不改变测试程序编译方式的情况下,有没有办法用libexample.a打包pthread库?
谢谢!
haskell - Cabal 未能构建详细的 0.9 测试套件
我正在尝试使用单个测试套件构建一个包:
这是发生的事情:
我正在使用带有 Haskell 平台 2014.2.0.0 的 Windows 8.1 64 位。我已经安装了 MSYS,路径上唯一的 MinGW 是 GHC。此外,所有 git 二进制文件都在路径上的 MSYS 和 MinGW 之后,因此它们不会冲突。任何建议表示赞赏。
更新:使用type: exitcode-stdio-1.0
.
c - ar 中的“rcs”选项有什么作用?
我确实阅读了 man 文件,但它没有帮助。rcs
似乎是传递给 ar 的最流行的选项,但对我来说含义不是很清楚。
所以c
意味着创建一个新的存档,但是为什么要使用r
?这似乎代表“替换”?该s
选项将对输出做什么?
c++ - 有没有办法查看 C/C++ 存档 (.a) 中的函数?
我们有一种情况(简化):
test()
存在于source.c
source.c
编译为object.o
object.o
链接到存档archive.a
archive.a
被编译成finalbinary
我们正在尝试将名称更改为test()
其他名称。但是(4)中的链接步骤表明新方法签名不存在。使用gobjdump
我们可以肯定地看到新的重命名方法存在于object.o
(它与其他方法在同一个 SECT 中并且不是 UND)。
我们可以肯定地看到object.o
存在于archive.a
. 但是,我们不确定(由于复杂的构建系统)archive.a
包含该方法。
TL;DR:有没有办法查看存档文件内部并列出其中特定二进制对象的功能?
file - 将输出重定向到“文件”命令
有什么方法可以让file
命令从中获取输入stdin
?具体来说,我正在尝试获取存档中文件的文件类型,并尝试在单个命令中完成。我试过这个:
但这不起作用。