GCC命令行参数的问题(静态库,32/64bit,pthread)

        由于对GCC的参数一知半解,害我今天早上浪费了一个多小时。“以此文祭奠失去的时间”


1、生成静态链接库:

分两步

g++ -c aaa.cpp

ar -rsv libaaa.a aaa.o

gcc默认要求库文件名必须是lib[名称].a的形式,动态链接库类似是.so


2、怎么用这个libaaa.a,有两种办法

g++ main.c -L"PATH_TO_AAA" -laaa

或者

g++ main.c libaaa.a

前者在使用静态库时候比较常见,最重要的是,-L和-l参数必须在源文件之后指定!我今天不知道这个问题,瞎试了半天。我猜这种规定有助于对不同的源文件指定不同的库,比较清晰。


3、64位系统加参数-m64

怎们看自己的系统是不是64位呢?

$su - root
#file /sbin/init
/sbin/init: ELF <b>;32-bit</b>; LSB executable, Intel 80386......

按字面上写的就对了


4、Linux的线程库

POSIX标准线程库pthread,如果工程里用到多线程库就需要注意gcc的参数,有些时候-lpthread会失败,比如RakNet,这时必须用-pthread。

-pthread和-lpthread的区别在网上可以搜到http://space.itpub.net/7232789/viewspace-688917

$ gcc -v -c x.c  
...  
/usr/lib/gcc/i486-linux-gnu/4.2.4/cc1 -quiet -v x.c -quiet -dumpbase x.c 


$ gcc -v -pthread -c x.c  
...  
/usr/lib/gcc/i486-linux-gnu/4.2.4/cc1 -quiet -v -D_REENTRANT


可见编译选项中指定 -pthread 会附加一个宏定义-D_REENTRANT,该宏会导致 libc 头文件选择那些thread-safe的实现;链接选项中指定 -pthread 则同 -lpthread 一样,只表示链接 POSIX thread 库。由于 libc 用于适应 thread-safe 的宏定义可能变化,因此在编译和链接时都使用 -pthread 选项而不是传统的 -lpthread 能够保持向后兼容,并提高命令行的一致性。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值