gpt4 book ai didi

linux - 为另一台服务器编译 gawk 可执行文件

转载 作者:太空宇宙 更新时间:2023-11-04 12:02:17 25 4
gpt4 key购买 nike

我有一台服务器,我无法在其中直接编译某些处理所需的 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 进行安装,我希望我可以在那里设置一些选项。

最佳答案

非常感谢您在我的原始帖子的评论中提供的帮助。下面是它最终如何工作的总结。我看到 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)

关于linux - 为另一台服务器编译 gawk 可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51932238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com