编译“压力ng”包的静态链接可执行文件

问题描述:

我试图编译“压力ng”包产生静态链接的可执行文件,以在GEM5完整系统模拟器中使用它。编译“压力ng”包的静态链接可执行文件

这个包的tarball可以下载here。我试图编译的版本是0.07.08。

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

但是,由于我需要在GEM5完整系统模拟中运行“stress-ng”exe,所以我需要确保exe是独立的。这通常使用“-static”CFLAG选项完成,但是,对于“stress-ng”,当我尝试此选项时出现错误。

下面是重现此错误的方法。编辑“Makefile文件”,并以线#25号线25结尾处添加“-static”选项应如下所示:

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

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

/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是Ubuntu 14.04和cc版本是4.6.4。

我在这里是否缺少一些其他的CFLAG选项?

我已经推出了新的修复程序,现在允许静态链接的压力ng回购。问题在于-lc在-lpthread之前,导致了问题。

拉的最新变化,然后用建:

STATIC = 1请

+0

您是该工具的开发者,不是吗?非常感谢帮助人。我还有一个问题:是否有任何问题或限制阻止在gem5模拟系统中使用stress-ng?我在问,因为当我在一个模拟系统中尝试过stress-ng(带有选项“--cpu 4 -b 1 --vm 4 --vm-bytes 1M --timeout 4s”)时,我得到一个错误,幸运的是并没有阻止工人的执行,但我不确定错误的严重程度。错误提示“stress-ng:error:[46]/sys/devices/system/cpu不存在”。请任何想法吗? – user8420488483439