linux不同机器下发布程序
在本机的linux环境下编译好,可以在本机上运行,但是由于要到现场安装,将程序直接拷贝过去时,发现程序运行报错。例如
/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9‘ not found
/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.11‘ not found
/lib/libc.so.6: version `GLIBC_2.7‘ not found (required by /usr/lib/libcrypto.so.10)
用命令ldd查看程序依赖的库文件有:
我们可以看到这些库文件都是在/lib/路径下的,特别是ld-linux.so.2,这里的ld-linux.so.2决定的程序查找库的默认路径起了作用。其他另外机器也有这些库,不过由于库文件版本的原因导致程序Run不起来。如果我们将这些库拷贝到其他机器上,程序依赖这些版本的库就不会有问题。因此我们可以这么做:
(1)将这些库文件拷贝到一个新建的文件夹下 /home/dynamic/下。
(2)然后修改makfile文件,makefile的g++编译选项最后,添加如下选项用来指定动态库的优先搜索路径和动态链接器:-Wl,--rpath=/home/dynamic/ -Wl,--dynamic-linker=/home/dynamic/ld-linux.so.2 ,重新编译。再用ldd命令查看编译的程序就可以看到依赖的库的文件的路径都响应修改了。
(3)如果将程序部署到另外台机器,在其他机器上新建 /home/dynamic/,将刚刚在编译器的机器上的库文件拷贝过去。这样程序就可以正常运行了
具体也可以参考文章http://tech.ddvip.com/2013-11/1384435922205976.html
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。