linux的C/C++编程
1.预处理 Pre-Processing
g++ -E test.cpp -o test.i //.i文件
# -E 指示编译器仅对出入文件进行预处理
2.编译 Compilling
g++ -S test.i -o test.s
# -S 编译器选项告诉g++在为C++代码产生了汇编语言文件后停止编译
# g++ 产生的汇编文件的缺省扩展名 .s
3.汇编 Assembling
g++ -c test.s -o test.o
4 链接 Linking
g++ test.o -o test
g++中的重要参数
-g 编译带调试信息的可执行文件,这个选项会产生能被gdb使用的调试信息
-O[n] 优化源代码
-l 和 -L 指定库文件 | 指定库文件路径
g++ -lglog test.cpp #链接的是glog库
-l 所指定的库在/lib或 /usr/lib 或 /usr/local/lib
-L 要自己表明所使用的库在哪里
g++ -L/home/bing/mytestlibfolder -lmytest test.cpp
-I 指定头文件搜索目录
g++ 默认搜索的头文件路径在/usr/include中
g++ -I/myinclude test.cpp #这里用的是绝对路径
-Wall 打印警告信息
-w 关闭警告信息
-std=c++11 设置编译标准
-o 指定输出文件名
-D 定义宏
g++ -DDEBUG main.cpp
#incldue <stdio.h>
int main(){
#ifdef DEBUG
printf("DEBUG LOG\n");
#endif
printf("in\n");
}
原本的编译执行
g++ main.cpp src/swap.cpp -Iinclude
生成一个库文件
文件夹路径
--include
--swap.h
--main.cpp
--src
--swap.cpp
#进入src目录
$cd src
#汇编 生成Swap.o二进制文件
g++ Swap.cpp -c -I../include -o Swap.o
#生成静态库libSwap.a ar是归档命令,把二进制文件归档为一个静态库
ar rs libSwap.a Swap.o
#回到上级目录
$cd ..
#链接这个静态库libSwap.a,生成可执行文件:staticmain
g++ main.cpp -Iinclude -Lsrc -lSwap -o staticmain
#这个-lSwap 有点怪 生成的库文件名为libSwap.a 引用的时候直接写Swap 即 -lSwap就行了
生成库文件之后,在引用的时候就不用把引用的源cpp文件的全称给打出来了,只要指定库函数文件夹,编译程序的时候会主动去搜索
#生成动态库libSwap.so
g++ Swap.cpp -I../include -fPIC -shared -o libSwap.so
#链接动态库libSwap.so
g++ main.cpp -Iinclude -Lsrc -lSwap -o sharemain
#但是的执行的时候首先指定系统搜索动态库的路径
LD_LIBRARY_PATH=src ./sharemain