GCC/G++快速使用指南

2013.08.25/2014.01.28发布于笔记暂无评论/目录

使用一个例子介绍GCC/G++的编译选项。

准备工作

以debian6为例,安装必要的软件包。

apt-get install build-essential

另外,在下面的例子中为了展示gcc的-L和-l选项,使用了mysql库,因此需要安装mysql-dev软件包

apt-get install mysql-dev

例子

工程涉及4个文件,如下所示,源代码放在这里

common.h  # 定义类型和宏等
util.h    # include common.h
util.cpp  # include util.h `<mysql/mysql.h>`
main.cpp  # include common.h util.h

Makefile

上面工程的Makefile定义如下。

GCC = /usr/bin/g++
GCC_FLAGS = -c -Wall
LD_FLAGS = -L /usr/lib/mysql -l mysqlclient
TARGET = gcc-quick-start
OBJECTS = util.o main.o
 
all: $(TARGET)

$(TARGET): $(OBJECTS)
	$(GCC) $(LD_FLAGS) -o $(TARGET) $(OBJECTS)

%.o: %.c
	$(GCC) $(GCC_FLAGS) $<

.PHONY: clean
clean:
	rm -f $(OBJECTS) $(TARGET)

编译为动态/静态链接库

介绍将二进制文件打包为动态和静态链接库的方法。

动态链接库 shared library

g++ -shared -o libctest.so -fPIC a.cpp b.cpp

静态链接库 static library

g++ -c a.cpp b.cpp
ar -rvs libtest.a a.o b.o 

注意事项

链接顺序

被依赖的库应当放在依赖它的库的后面,如A依赖于B,则B应置于A后。

g++ ... A B

强制使用静态/动态库

使用-Wl选项可以设置使用静态或动态库,可参考这篇文章

g++ -Wl,-Bstatic -lz -lfoo -Wl,-Bdynamic -lbar -Wl,--as-needed

上面的命令将zlib和libfoo链接为静态库,将libbar链接为动态库。 -Wl选项将后面的用逗号隔开的参数列表传给链接器ld。

阅读资料

#gcc#教程#未完成

评论