gcc的一些参数

预处理器  gcc -E hello.c  -o hello.i   

编译器      gcc -S hello.i  -o hello.s   

汇编器      gcc -c  hello.s -o hello.o   

链接器      gcc      hello.o -o hello

hello.c       gcc -E      hello.i     gcc -S       hello.s      gcc -c       hello.o          gcc     a.out 

1、指定头文件

示例:gcc sum.c -I ./include -o app

2、指定动态库

示例:gcc sum.c -L  动态库的所在路径   -l动态库的名

 

 -D       指定程序中的宏

-O      是否优化程序  -O0  不优化   -O1   稍微优化  -O2   更优化 -O3   最优化了,不能再优化

-Wall  输出警告信息

-g       生成的程序可以进行gdb调试

 

静态库的使用

命名规则     lib+库名字+.a

制作过程    生成对应的.o     .c --> .o     -c                                                                              gcc     *.c   -c

                  将生成的.o文件打包   ar rcs + 静态库的名字(libMytest.a)+生成的所有的.o         ar rcslibMytest.a    *.o

发布和使用静态库

             发布静态库

             头文件

编译      gcc main.c lib/liblibMytest.a

             或者用-l指定

使用优点    直接打包到程序中,不用需要库了  库的加载速度快

       缺点     程序变得很大   库变化了,要重新编译程序

 

 

共享库的制作

命名规则:     lib+名字+.so

制作步骤:

生成与位置无关的代码(生成与位置的.o)   gcc -fPIC -c *.c

gcc -share -o    libMyCalc.so    *.o

 

 

如果出问题:

使用ldd 应用程序   示例 ldd myapp  看哪个库没有找到

 

动态库会查找PATH中的路径

 

 

解决动态库链接失败问题?

1、可以指定动态库路径 export LD_LIBRARY_PATH  这个只是临时的

2、export LD_LIBRARY_PATH=  这个加入.bashrc文件中  这个是永久的

3、可以把so文件拷贝到/ib目录中

4、需要找到动态连接器的配置文件(/etc.ld.so.conf)     动态库的路径写到配置文件中       更新sudo ldconfig

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值