Chinaunix首页 | 论坛 | 博客
  • 博客访问: 520847
  • 博文数量: 85
  • 博客积分: 1797
  • 博客等级: 上尉
  • 技术积分: 1236
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-02 08:53
个人简介

职位:技术总监 1、精通c++(linux平台、vc++Mfc、qt)、java、php、unity3d,略懂python 2、用c++开发过嵌入式产品,用c++开发过大型银行运维产品 3、用java开发大型银行运维产品,学校教务系统 4、用php开发进销存系统(在销售中),用php开发淘宝小程序 5、用unity3d开发衣柜设计软件,在运营中

文章分类

全部博文(85)

分类: C/C++

2011-09-29 19:04:23

Linux/unix程序静态编译

一、前言


      问题来源:做动态口令认证的时候,由于需要linux系统、aix、hpunix等系统都能加pam认证,这时候遇到一个问题,客户那每个系统的库都不一样,所有才想到了需要静态编译,不依赖客户系统上的库

      
因为程序要要安装在不同的操作系统上,在linux上每个操作系统都有不同的依赖库。要想让自己的程序在每种操作系统上都能运行,有两种方法。

1、做yum源,能解决所有依赖问题。

2、将程序弄成静态编译。

unix上是没有yum源的,还有我想的是使用g++做统一的编译工具。所以静态编译时最好的解决方法。

二、可执行程序的静态编译

默认使用动态编译

使用动态编译:

三、动态库的静态编译

默认编译

可见使用了很多动态库,其中包括g++的动态库。

-shared参数是指生成动态库。

这个参数是在大部分linuxunix的选项

solaris上,没有不使用-shared,生成动态库使用-G

使用静态库编译静态库:

可见此动态库不依赖于任何动态库。

参数讲解:

-Wl,-Bstatic是传个link的,让其找相应静态库连接。这个参数很有意思,它与-Wl,-Bdynamic能配合使用,从而达到指定哪个库使用动态库,哪个库使用静态库。

但是光使用这个参数,对于g++的库会有问题。报下面的错误

因为gcc_s是没有静态库的。

再加一个参数-static居然能解决问题。这个凑巧碰出来了,现在也不知道是为什么。

Solarishp-unix

在这两个系统上只使用-static  -Wl,-Bstatic,对gcc库会有问题,应再加上参数-static-libgcc

64linux

64位的linux上,对于g++的库只能用动态库编译,静态编译始终会有gcc_s的错误

阅读(1325) | 评论(0) | 转发(0) |
0

上一篇:关于nasm反汇编

下一篇:lvm实现集群

给主人留下些什么吧!~~