C++编译连接总结(二)--自己的静态库动态库的编译与引用

静态库
在系统提示符下键入以下命令得到hello.o文件
gcc -c hello.cpp
在系统提示符下键入以下命令将创建静态库文件libmyhello.a
ar crv libmyhello.a hello.o
在程序中使用静态库
 gcc -o hello2 m.cpp -L. -lmyhello
 
 


动态库
生成具有-shared -fPIC的hello.o
gcc -shared -fPIC -c hello.cpp
生成动态库libmyhello2.so
gcc -shared -fPIC -o libmyhello2.so hello.o
编译(-Wl,--rpath=.要与-L配合)
gcc -o hello m.cpp  -L. -lmyhello2  -Wl,--rpath=.
gcc -o hello2 m.cpp  -L ./1 -lmyhello   -Wl,--rpath=./1


附录:

在linux下,默认只到/lib、/usr/lib和/usr/local/lib查找,找不到程序将无法启动。

gcc编译链接动态库时,很有可能编译通过,但是执行时,找不到动态链接库,那是

因为-L选项指定的路径只在编译时有效,编译出来的可执行文件不知道-L选项后面的值,当然找不到。

解决方法是通过-Wl,--rpath=<your_lib_dir>,使得可执行文件记住链接库的位置.


ldd

     显示程序依赖的动态共享库,

     以及库文件能否被找到

例子:ldd hello


#include <stdio.h>
void hello(const char *name)
{
    printf("%s!\n", name);
}
#ifndef HELLO_H
#define HELLO_H
void hello(const char *name);
#endif
#include "hello.h"
int main()
{
    hello("hello world");
return 0; }


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值