84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
这样把文件拷贝到其他地方就可以使用了
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
首先,你需要知道依赖哪些库,ldd可以帮到你,不过不要高兴的太早,有些程序采用动态加载库,这些动态加载的库是否依赖其他的库就无法通过ldd这种静态化分析工具知道了,你需要找到这些动态加载库,并且重复调用ldd。
ldd
不过知道了依赖并不解决你的问题,我想你是希望能够编译出一个没有依赖的可执行文件,直接放到其他机器上运行。这需要用静态链接的方式,重新编译程序源码才行,同时,依赖库也需要提供archive版本的库(通常是.a),而不是.so。很多依赖库在安装的时候是默认不安装.a版本的库的,甚至,有些库即使你采用源码编译,也无法默认编译出archive版本的库。
静态链接
.a
.so
补充一点:如果你试图将glibc静态编译进可执行文件的话,请尽量不要这么做。glibc是几乎所有linux发行版系统都带的基础库,一般不需要静态链接进程序,而且glibc能做到向下兼容,所以只需在相对低版本的glibc下编译,即可让程序在linux系统之间具有更好的可移植性。如果你使用C++,那么stdlib可能是你也要考虑的问题。试图静态化glibc会引发一些莫名其妙的问题。
linux下ldd命令查看可执行程序所依赖的库
ldd 可执行文件名
动态库你只能打包过去,编译是需要源码加上链接的时候使用静态链接才行的。。打包的时候还要注意底层库(比如glibc)的版本,相同的机器环境的话就没啥问题了,还有就是运行的时候要手动设置LD_LIBRARY_PATH来启动你的程序。。同楼上+楼上的楼上 ldd可以查看elf程序使用的动态库链接的指向。。
glibc
LD_LIBRARY_PATH
elf
首先,你需要知道依赖哪些库,
ldd
可以帮到你,不过不要高兴的太早,有些程序采用动态加载库,这些动态加载的库是否依赖其他的库就无法通过ldd
这种静态化分析工具知道了,你需要找到这些动态加载库,并且重复调用ldd
。不过知道了依赖并不解决你的问题,我想你是希望能够编译出一个没有依赖的可执行文件,直接放到其他机器上运行。这需要用
静态链接
的方式,重新编译程序源码才行,同时,依赖库也需要提供archive版本的库(通常是.a
),而不是.so
。很多依赖库在安装的时候是默认不安装.a
版本的库的,甚至,有些库即使你采用源码编译,也无法默认编译出archive版本的库。补充一点:如果你试图将glibc静态编译进可执行文件的话,请尽量不要这么做。glibc是几乎所有linux发行版系统都带的基础库,一般不需要静态链接进程序,而且glibc能做到向下兼容,所以只需在相对低版本的glibc下编译,即可让程序在linux系统之间具有更好的可移植性。如果你使用C++,那么stdlib可能是你也要考虑的问题。试图静态化glibc会引发一些莫名其妙的问题。
linux下ldd命令查看可执行程序所依赖的库
动态库你只能打包过去,编译是需要源码加上链接的时候使用静态链接才行的。。
打包的时候还要注意底层库(比如
glibc
)的版本,相同的机器环境的话就没啥问题了,还有就是运行的时候要手动设置LD_LIBRARY_PATH
来启动你的程序。。同楼上+楼上的楼上
ldd
可以查看elf
程序使用的动态库链接的指向。。