用g++编译程序时符号说明

用g++编译程序时,-l 与-L各是什么意思?还有-I

连接mysql数据库的程序,要用g++ tt.cc -lmysqlclient -L /usr/lib/mysql -I/usr/include/mysql才能编译

g++ tt.cc -lmysqlclient -L /usr/lib/mysql -I/usr/include/mysql

-l 连接共享库 mysqlclient 吧
-L lib 位置
-I #include <xxxx.h>; xxxx.h 位置

一、编译过程: 
1)预处理,生成.i文件 
2)转换成为汇编语言,生成.s文件 
3)汇编变为目标代码(机器代码),生成.o文件 
4)链接目标代码,生成可执行程序。  

二、常用编译选项 
tips:选项必须独立给出:‘-pg’和‘-p -g’完全不同  

-c:编译或汇编源文件,不做连接。 
G++ -c test.cpp输出test.o  

-o file:制定输出文件为file  

-Wall: 输出所有编译警告(最好加上)  

-Dmacro=XXX:定义宏。  

-shared:生成一个共享库文件 
g++ -shared -o libtest.so test.o  

-fPIC:生成位置无关目标代码,适用于动态连接。  

-llibrarytest:连接名字为librarytest的库 
真正名字是liblibrarytest.so(a) so是动态库,a是静态库。 
严格按照文件名搜索,版本号要创建软连接。 
编译搜索目录:
用户-L指定, LIBRARY_PATH,系统目录/lib  /usr/lib 
运行搜索目录:
LD_LIBRARY_PATH,ld.so.cache & /etc/ld.so.conf ,系统目录  /lib  /usr/lib 
动态库和静态库同名,优先动态库。  

-Ldir:添加库文件搜索路径 -Idir(include):添加头文件搜索路径  

-g:产生调试信息  

-olevel:优化级别,一般用o2  

三、静态库、共享库 
静态库:一些.o文件打包,在被连接后成为程序的一部分。 
编译方法 
-g++ -c test.cpp 
-ar res libtest.a test.o 
链接方法: 
-g++ -Wall -o test testMain.cpp -ltest -L./  

共享库:链接的时候不会被复制到程序中。 
编译方法: 
g++ -c fPIC test.cpp	
//要动态 g++ -shared -WI, -soname, libtest.so, -o libtest.so.1.0.1 test.o 
mv libtest.so.1.0.1 /usr/lib 
sudo ldconfig & || ll /user/lib/libtest.so //创建一个软连接。     
链接方法:
g++ -o test test.cpp ./libtest.so -ldx_cxx  

四、常用命令 
ldd:显示程序依赖的同台共享库。  
file:查看文件格式信息。  
ldconfig:在搜寻目录下搜索出可以共享的动态链接库 
参考:
http://www.cnblogs.com/forward/archive/2012/01/10/2318483.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值