这样把文件拷贝到其他地方就可以使用了
首先,你需要知道依赖哪些库,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
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(3)
首先,你需要知道依赖哪些库,
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
程序使用的动态库链接的指向。。