Linux环境编译动态库和静态库总结

首先总结静态库的编译步骤。

1 先基于.cpp或者.c文件生成对应的.o文件

2将几个.o文件 使用ar -cr命令 生成libname.a文件

libname.a 为静态库, name 为静态库的名字,

可以根据模块功能命名。

 

举个例子

在当前目录下,有一个mymethod.h文件

 

在mymethod.cpp里实现这两个函数

 

在当前目录下有一个main.cpp文件

 

为了方便使用,将mymethod.cpp封装成静态库和动态库

首先将mymethod.cpp 编译成目标文件

 g++ -c mymethod.cpp -o mymethod.o

然后根据目标文件生成静态库

 

ar -cr libmymethod.a mymethod.o

ar命令可以用来创建、修改库,也可以从库中提出单个模块

-c 选项表示 创建一个库。不管库是否存在,都将创建

-r 选项表示 将模块插入库,如果库中有对应的模块,那么进行更新

如果把多个.o文件插入库.a里,只需要在后面用空格分开写出来

格式

ar -cr 静态库libname.a  name1.o name2.o

静态库的命名有规则,格式为lib+库名+.a

生成静态库libmymethod.a后,

编译main.cpp 连接静态库生成可执行文件main

 g++ main.cpp -o main -I ./ -L ./ -lmymethod

-I选项表示头文件路径

-L表示静态库或者动态库的路径

链接静态库写成 -l库名即可:-lmymethod

运行./main 可以输出结果

 

下面是动态库的编译

动态库的命名是lib+库名+.so

 

动态库需要使用-shared 选项以及-fPIC选项

g++ -c  -fPIC mymethod.cpp -o mymethod.o

-fPIC表示代码是和地址无关的,不需要被不同模块重定位

然后根据目标文件生成动态库.so文件

g++ -shared -o libmymethodso.so mymethod.o

-shared 选项表示生成的是.so动态库文件

下一步是链接动态库

 g++ main.cpp -o main -I ./ -L ./ -lmymethodso

此时不能直接运行./main否则会提示找不到对应的动态库

上面的步骤可以直接写成一句话

g++ -shared -fPIC mymethod.cpp -o libmymethodso.so

 

我们现在有几种方式配置动态库的路径

第一种

export LD_LIBRARY_PATH="./:$LD_LIBRARY_PATH"

这种方式将动态库路径配置到LD_LIBRARY_PATH,只是暂时生效

第二种

使用 ldconfig 机制(需 root 权限):
● 首先,在 /etc/ld.so.conf.d/ 下创建一个 .conf 文件,
如 libmymethod.conf ,内容为共享库所在目录的绝对路径
● 然后,运行 ldconfig

 

第一种比较简单,配置好后可以直接运行./main

第二种按照操作进入/etc/ld.so.conf.d/,

然后创建mymethod.conf

 

用vi打开mymethod.conf,添加动态库的绝对路径

/home/secondtonone/soando

最后运行ldconfig, 即可生效了。

这样就可以运行./main

 

现在对动态库路径配置做一个总结

 

解决共享库路径问题
 gcc/g++ 编译期 :
● 使用 ­L 选项指定所需链接的共享库所在目录(如果共享库或其连
接文件位于 /usr/lib 、 /usr/local/lib 或由 LD_LIBRARY_PATH 指定
的目录下,则不需指定该选项)
● 使用 ­l 选项指定所需链接的共享库名称(无前缀、后缀)
 程序运行期:
● 使用 LD_LIBRARY_PATH 环境变量来指定所需引用的共享库所在
目录 ( 临时指定或永久性写入相关文件,普遍适用于 UNIX 世界 )
● 使用 ldconfig 机制(需 root 权限):
● 首先,在 /etc/ld.so.conf.d/ 下创建一个 .conf 文件,
如 libmymethod.conf ,内容为共享库所在目录的绝对路径
● 然后,运行 ldconfig


转载地址 : http://www.cnblogs.com/secondtonone1/p/5524351.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值