编译其他服务器的gawk可执行文件

时间:2018-08-20 13:51:31

标签: linux compilation static-libraries libraries autotools

我有一个服务器,无法直接编译某些处理所需的gawk版本。因此,我试图找出如何在另一个平台上进行编译并将可执行文件传输到服务器并在其中执行的方法。我尝试将现有的gawk从便携式计算机的发行版(Linux Mint)复制到服务器(Redhat),但是它没有必需的库,至少没有在可执行文件正在寻找它们的位置。

$ ./gawk --version
./gawk: error while loading shared libraries: libsigsegv.so.2: cannot open shared object file: No such file or directory

是否有一种标准的方法来编译像gawk这样的程序,使其不依赖外部库(几乎像我想的AppImage一样)?由于gawk使用make进行安装,因此我希望可以在其中设置一些选项。

2 个答案:

答案 0 :(得分:1)

非常感谢您对我的原始帖子的评论中提供的帮助。以下是最后的工作方式摘要。我看到make产生了以下内容,作为创建gawk可执行文件的最终编译命令:

gcc -std=gnu99  -g -O2 -DNDEBUG  -L/usr/lib64//lib -o gawk array.o awkgram.o builtin.o cint_array.o command.o debug.o eval.o ext.o field.o floatcomp.o gawkapi.o gawkmisc.o int_array.o io.o main.o mpfr.o msg.o node.o profile.o re.o replace.o str_array.o symbol.o version.o support/libsupport.a -lmpfr -lgmp -ldl -lm 

所以我修改了gcc命令,如下所示:

下载并编译mpfr库(仅./configuremake)。 下载并编译gmp库(仅./configuremake)。 下载并编译gawk-4.2.1。

./configure
make
gcc -std=gnu99  -g -O2 -DNDEBUG  -L/usr/lib64//lib -o gawk array.o awkgram.o builtin.o cint_array.o command.o debug.o eval.o ext.o field.o floatcomp.o gawkapi.o gawkmisc.o int_array.o io.o main.o mpfr.o msg.o node.o profile.o re.o replace.o str_array.o symbol.o version.o support/libsupport.a  -Bstatic -L /home/osboxes/Downloads/mpfr-4.0.1/src/.libs/ -l:libmpfr.a -L /home/osboxes/Downloads/gmp-6.1.2/.libs/ -l:libgmp.a -Bdynamic -ldl -lm 

这导致了一个带有静态链接的mpfr和gmp库的gawk可执行文件,因此当我将其传输到尚未安装libmpfr.so的服务器时,它便可以使用静态库执行。

添加静态库之前:

[osboxes@osboxes Gawk]$ ldd gawk
    linux-vdso.so.1 =>  (0x00007ffe17750000)
    libmpfr.so.4 => /lib64/libmpfr.so.4 (0x00007fca2042d000)
    libgmp.so.10 => /lib64/libgmp.so.10 (0x00007fca201b5000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007fca1ffb1000)
    libm.so.6 => /lib64/libm.so.6 (0x00007fca1fcaf000)
    libc.so.6 => /lib64/libc.so.6 (0x00007fca1f8e2000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fca20688000)

添加静态库后:

[osboxes@osboxes gawk-4.2.1]$ ldd gawk
    linux-vdso.so.1 =>  (0x00007fff1b8d5000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f69363b0000)
    libm.so.6 => /lib64/libm.so.6 (0x00007f69360ae000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f6935ce1000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f69365b4000)

答案 1 :(得分:-1)

  

是否有一种标准的方法来编译像gawk这样的程序,使其不依赖外部库(几乎像我想的AppImage一样)?

为什么不制作一个AppImage?