在此之后,我尝试编译stdlib.so以将其他代码与其链接。不幸的是,stdlib.so本身是一个动态链接的二进制:
# ldd /usr/local/go/pkg/linux_amd64_dynlink/libstd.so
ldd: warning: you do not have execution permission for `/usr/local/go/pkg
/linux_amd64_dynlink/libstd.so'
linux-vdso.so.1 (0x00007ffd611d7000)
libpthread.so.0 => /lib64/lib
在Linux中,下载了一个程序源代码,并希望将其静态链接。我有一个很大的Makefile,我
./configure
make
编译。理解它有点太笼统了,但我如何才能使二进制文件静态链接呢?
编辑:这样做的原因是希望确保二进制文件不会有依赖关系(或者至少是尽可能少),这样就可以在任何基于Linux的计算机上运行,即使是没有Internet连接的计算机,也可以是未更新的Linux。
我在Ubuntu20.04中使用gcc 10构建了我的C++程序,然后在Ubuntu18.04中运行它,但不幸的是,得到的错误如下:
/opt/aspen/my: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /opt/my/myRenderer.so)
/opt/my/my: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /opt/my/libpython3.8.
我需要创建一个与尽可能多的发行版一起工作的可执行文件。我阅读了很多关于这方面的信息,我发现有两种方式:静态链接和动态链接。第一种解决方案避免了随可执行文件库一起使用,但它在许可证方面存在一些问题。第二种解决方案似乎更合适。通过动态链接,链接器将它需要的库的所有引用添加到可执行的ELF头中,操作系统在执行二进制文件之前加载这些库。
命令readelf -d <binary>显示所需的库:
Dynamic section at offset 0x149d80 contains 33 entries:
Tag Type Nam
我试着做一个尽可能可移植的可执行文件。删除了几个依赖项之后,在另一个系统上运行二进制文件时,我遇到了以下情况:
/lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.15' not found (required by foob)
/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.15' not found (required by foob)
/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (r
我正在用C++编译一个-static程序,这样我就可以把我的程序带到服务器上运行了。服务器没有安装我要链接的所有库,当试图运行程序时,我得到一个错误,即由于没有安装libopenblas.so.0,所以找不到OpenBLAS:
error while loading shared libraries: libopenblas.so.0: cannot open shared object file: No such file or directory
我需要OpenBLAS作为线性代数库Armadillo,并使用标志进行编译。
-std=c++11 -static -pthread -Ofas
为什么输出没有出现,我是Visual的新手,我不知道为什么会发生这种情况。我正在提供一个截图.
这是我得到的代码,而不是输出。
[Running] cd "/home/dell/src/" && g++ hello.cpp -o hello && "/home/dell/src/"hello
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x24): u