一、linux C语言的编译链接过程
gcc编译命令gcc -E hello.c -o hello.i 预处理 到/usr/include下找到头文件
gcc -S hello.i -o hello.s 编译 形成汇编代码
gcc -c hello.s -o hello.o 汇编
gcc hello.o -o hello 链接 找到/lib/libc.so.6=> /lib/x86_64-linux-gnu/libc.so.6
二、C语言库函数源码
在gnu里面找到libc为C语言库函数源码,请参考http://www.360doc.com/content/10/0930/20/3637244_57623959.shtml,个人认为由它可以生成上面所说的/usr/include下的头文件和/lib/libc.so.6的动态链接库。
三、C语言库函数使用帮助
1、man 3 strcmp
2、到gnu看libc的文档
3、看源码
四、linux C++语言的编译链接过程
g++ -E hello.cpp -o hello.i 预处理 到/usr/include/c++/4.4下找到头文件(用locate iostream找到)
g++ -S hello.i -o hello.s 编译 形成汇编代码
g++ -c hello.s -o hello.o 汇编
g++ hello.o -o hello 链接 找到/usr/lib/libstdc++.so.6 =>/usr/lib/x86_64-linux-gnu/libstdc++.so.6,还有很多其他的,使用命令ldd hello来看
五、C++语言库函数源码
参考http://gcc.gnu.org/libstdc++/,下载gcc源码,libstdc++已经包含在了gcc源码中,编译gcc源码,可以生成/usr/include/c++/4.4的头文件和/usr/lib/libstdc++.so.6动态链接库。同时生成gcc,g++编译器。
六、gcc g++编译器的区别
对于 hello.c 文件,两者完全一样。
对于hello.cpp文件
gcc -c hello.cpp -o hello.o
gcc -lstdc++ hello.o -o hello
g++ -c hello.cpp -o hello.o
g++ hello.o -o hello
在链接时候,两者不同,要使用g++或者是gcc -lstdc++