一、编译成目标文件
g++ -c main.cpp以上命令会生成mian.o文件
若cpp文件中没有main()函数,以上命令则会报错,这时需加上“-fpic”
g++ -fpic -c ini.cpp若cpp中include了其他目录的头文件,如第三方类库,则可加“-I path”指明包含路径,可以同时加多个,每个“-I path”之间用空格分隔
如ini.cpp 有
#include <boost/property_tree/ptree.hpp>假设你的boost存放路径是 /data/boost/, 那么编译命令就是
g++ -fpic -c ini.cpp -I/data/lib/二、链接
g++ -o test.out mian.o ini.o把mian.o ini.o链接打包成可执行文件test.out ,这种方式是把所有之前生成的目标文件都链接在以前并打包进一个文件(test.out)
其实有些库是可以共享,不需要都打包在一起的,那我们就可以编译一个动态链接库
g++ -shared -o libini.so ini.o xx.o
如果编译的共享库还要依赖其它的共享库,最好编译时一并解决依赖问题(加“-l”参数),虽然这时不解决也不会报错(除非加“-Wl,--no-undefined”参数),但应用程序链接这个共享库时,必须加上这些依赖库的列表
g++ -shared -Wl,--no-undefined -fPIC -o libini.so ini.cpp -l boost_system
这个是链接一个动态链接库(标准命名是 libxxx.so)
g++ -o test.out mian.o -lxxx -L./lib/若.so文件是标准命名,-lxxx 就是链接 libxxx.so 这个动态库, -L./lib/ 是指定一个.so文件的搜索目录。这样链接不会吧.so文件打包进
test.out文件中,执行时会去其系统包含路径中找 libini.so,所以如此链接后还不能正确执行的,需吧路径 ./lib/ 加入系统包含路径里
GCC编译与链接指南
本文介绍了使用GCC进行C++程序编译与链接的基本方法,包括如何编译成目标文件、如何链接生成可执行文件及动态链接库,并讨论了如何处理第三方库依赖等问题。
530

被折叠的 条评论
为什么被折叠?



