博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
全静态标准库链接方式
阅读量:7222 次
发布时间:2019-06-29

本文共 1885 字,大约阅读时间需要 6 分钟。

场景说明:RedHat6.4 + GCC4.4.6

1)在应用boost静态库的过程中,参考了一篇文章,里面提供了-static参数,指定程序使用静态库,指令如下:

g++ 2testboost.cpp -o test -I /usr/local/include/boost/    /root/lib/libboost_system.a  /root/lib/libboost_filesystem.a  -static

在实验机器上,编译出错:/usr/bin/ld: cannot find -lm

大多数的解决方案都是搜索是否存在libm.so文件,而且确实已经在/usr/lib目录下存在。

2)编译一个全静态的程序,添加-static,编译出错如上所示

3)编译一个半静态的程序,添加-static-libgcc,编译出错如上所示

4)添加-static-libstdc++,编译出错如下:g++: 无法识别的选项‘-static-libstdc++’

代码如下:

#include <iostream>

#include <boost/filesystem.hpp>

using namespace boost::filesystem;

int main(int argc, char *argv[])

  if (argc < 2) 

  {    

    std::cout << "Usage: tut1 path\n";    

    return 1;  

  }  

  std::cout << argv[1] << " " << file_size(argv[1]) << std::endl;  

  return 0;

}

编译过程:

静态链接:

 g++ 2testboost.cpp  -I /home/boost/boost_1_49_0/boost/  /home/boost/boost_1_49_0/stage/lib/libboost_system.a /home/boost/boost_1_49_0/stage/lib/libboost_filesystem.a -o 2test 

动态链接:

使用安装之后的目录

g++ 2testboost.cpp -I /usr/local/include/boost/ -L /usr/local/lib -lboost_system -lboost_filesystem -o 2test

使用原有的生成目录

g++ 2testboost.cpp -I /home/boost/boost_1_49_0/boost/ -L /home/boost/boost_1_49_0/stage/lib  -lboost_system -lboost_filesystem -o 2test

如果没有指定安装的目录,运行时候需要ldconfig /home/boost/boost_1_49_0/stage/lib

注意:-L参数指定的目录目前只能够是动态库的目录,每一个静态库都必须填写完整的路径,否则无法链接成功!!

解决方案:

yum install glibc-static

该命令安装静态编译版本的C库。网上有的执行了如下的指令:

#yum install libstc++-static

但是使用yum 安装的时候没有找到相关的安装包,但是同样解决了问题.出现上面问题的原因是GCC的版本不支持,默认情况下安装的是动态的C库,当需要将静态C库链接到程序的时候出现了cannot find -lm的错误。

ldd能够分析出程序依赖的动态库,测试是否是全静态程序:

[root@jack ~]# g++ 2testboost.cpp -o test -I /usr/local/include/boost/    /root/lib/libboost_system.a  /root/lib/libboost_filesystem.a  -static

[root@jack ~]# ldd test

不是动态可执行文件

参考:

http://www.tuicool.com/articles/Ifqm2uM

http://bbs.csdn.net/topics/391880682

http://www.ibm.com/developerworks/cn/linux/l-cn-linklib/

     本文转自fengyuzaitu 51CTO博客,原文链接:http://blog.51cto.com/fengyuzaitu/1584985,如需转载请自行联系原作者
你可能感兴趣的文章
积累_前辈的推荐
查看>>
strcpy和memcpy的区别《转载》
查看>>
在windows平台下electron-builder实现前端程序的打包与自动更新
查看>>
DroidPilot V2.1 手写功能特别版
查看>>
COOKIE欺骗
查看>>
js 强转规范解读
查看>>
ACdream - 1735:输油管道
查看>>
golang 获取get参数
查看>>
服务器状态码
查看>>
非小型电子商务系统设计经验分享
查看>>
Video Target Tracking Based on Online Learning—深度学习在目标跟踪中的应用
查看>>
深度学习理论解释基础
查看>>
遗传算法
查看>>
将web网站移动化
查看>>
Application-Session-Cookie
查看>>
Perl的多进程框架(watcher-worker)
查看>>
phpMyAdmin 后台拿webshell
查看>>
Linux 关机 休眠, 关闭移动设备自动挂载 命令
查看>>
Html唤起手机APP,如果有就唤起,如果没有就跳到下载页。
查看>>
Java中File类如何扫描磁盘所有文件包括子目录及子目录文件
查看>>