C++Linux下编译记录

记录下自己在编译C++源代码时的学习笔记与自己的理解,方便日后使用Linux编译C++源代码,为日后使用C++ 奠定基础.

 

静态库编译:

        简介: 

  • 静态库对函数库的链接是放在编译时期完成的。
  •  程序在运行时与函数库再无瓜葛,移植方便。
  •  浪费空间和资源,因为所有相关的目标文件与牵涉到的函数库被链接合成一个可执行文件。

 

步骤:

从cpp 文件生成 (.o)文件

1.   g++ -c 文件名.cpp  

     例子:

     g++ -c GetPic.cpp

2.  ar -crv [lib文件名].a [文件名].o   (特殊说明: 库文件名有名目规则 ---> lib库文件名.o)

    例子:

    ar -crv libSomeOne.a GetPic.o

3.生成最终的可执行文件:

   g++ [静态库文件名].a [调用静态库文件名的源文件].cpp -o [生成的可执行文件名]

   例子:g++ saymain.cpp libsay.a -o saymain

 

动态库编译:

       简介:

  • 动态库把对一些库函数的链接载入推迟到程序运行的时期。
  •  可以实现进程之间的资源共享。(因此动态库也称为共享库)
  •  将一些程序升级变得简单。
  •  甚至可以真正做到链接载入完全由程序员在程序代码中控制(显示调用)。

 

生成步骤:

1.生成.o文件

 g++ -fPIC -c [源文件].cpp

2.生成动态库 .so 文件

g++ -shared -o [lib文件名].so [文件名].o  (特殊说明: 库文件名有名目规则 ---> lib库文件名.so)

3.生成最终的可执行文件:

g++ main.cpp -L [库文件目录] -l[库文件名]   (特殊说明: 库文件名与-l参数中间不能用空格,且库文件名是标准名目区中间名字,如libaa.so,那么库文件名就是aa)

4.因为是动态库的原因,库并不在系统环境中,此时执行可执行文件会报 :

error while loading shared libraries: libOkPath.so: cannot open shared object file: No such file or directory

解决:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:[库文件目录]

例子:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/cpppro

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值