编译 "stress-ng" 包的静态链接可执行文件

Compile a statically linked executable of the "stress-ng" package

我正在尝试编译 "stress-ng" 包以生成静态链接的可执行文件以在 GEM5 全系统模拟器中使用它。

可以下载此软件包的 tarball here。我要编译的版本是 0.07.08.

要编译此包的动态链接可执行文件,只需 "make"。这对我有用。

但是,由于我需要从 GEM5 全系统模拟中 运行 "stress-ng" exe,我需要确保该 exe 是独立的。这通常是使用“-static”CFLAG 选项完成的,但是,对于 "stress-ng",我在尝试此选项时遇到错误。

以下是重现此错误的方法。编辑 "Makefile" 并在第 25 行末尾添加“-static”选项。第 25 行应如下所示:

CFLAGS += -Wall -Wextra -DVERSION='"$(VERSION)"' -O2 -std=gnu99 -static

保存然后make,你会看到下面的错误:

/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/libpthread.a(lowlevellock.o): In function `__lll_lock_wait_private':
/build/eglibc-3GlaMS/eglibc-2.19/nptl/../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:78: multiple definition of `__lll_lock_wait_private'
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/libc.a(libc-lowlevellock.o):(.text+0x0): first defined here
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/libpthread.a(lowlevellock.o): In function `__lll_unlock_wake_private':
/build/eglibc-3GlaMS/eglibc-2.19/nptl/../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:328: multiple definition of `__lll_unlock_wake_private'
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/libc.a(libc-lowlevellock.o):(.text+0x30): first defined here
collect2: ld returned 1 exit status
make: *** [stress-ng] Error 1

最后,OS是Ubuntu14.04,cc版本是4.6.4。

我是否遗漏了其他一些 CFLAG 选项?

我已经对 stress-ng 存储库推送了一个新的修复程序,现在允许静态链接。问题是 -lc 在 -lpthread 之前,这导致了问题。

拉取最新的更改然后构建:

STATIC=1 使