gcc g++ 学习

一.
编译的时候
(此时main.cpp头文件是#include "Person.h")
g++ main.cpp ../Person/Person.cpp -o main -I../Person
解析:
../Person/Person.cpp    链接main.cpp的上一层文件夹Person内的Person.cpp
-I../Person             main.cpp中包含的Person.h头文件在上一层文件夹Person内,用-I代表头文件路径

ps:在main.cpp的头文件包含中写成
#include "../Person/Person.h"
应该就不需要加-I了,但是Person.cpp文件应该链接进去


二.
g++ main.cpp -o main:动态编译

g++ main.cpp -o main_static -static:静态编译,编译时间长,编译得到的文件main_static比上一个文件main大很多

三.
g++ Person.cpp -fpic -shared -o libPerson.so
-fpic:表示Person.cpp里的函数与代码位置不相关,即通过头文件名字找到引用
-shared:表示是一个动态库
libPerson.so:必须以lib开头,以.so结尾,Person才是库的名字

此时,使用动态链接库Person编译main.cpp
g++ main.cpp -o main -I../Person -L../Person -lPerson
-L:表示动态链接库的位置,如果不指出,则会自动到系统的环境变量中去找
-l:动态链接库的名字

此时运行main(即./main)会报错,原因是没有指定库文件的路径
两种方案,
一是把这个so文件拷贝到系统的PATH下,
二是通过写执行脚本的方式,即
export LD_LIBRARY_PATH=../Person

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值