编译(compile):将.c或.cpp文件编译成.o(linux)或者.obj(windows)文件,也称为中间目标文件linux
连接(link):将.o或.obj连接成可执行文件,windows下是.exe结尾,Linux没有限制,通常不带有后缀名macos
库文件:大型项目编译时生成的目标文件太多,主要是给中间目标文件打包windows
静态 => .a .lib,在连接时生成执行文件函数
动态 => .so .dll,由执行文件运行时加载优化
gcc xxx.c,编译成功后默认生成a.out执行文件 => ./a.outlua
gcc xxx.c -o demo 或 gcc -o demo xxx.c spa
gcc xxx.o -o demo调试
gcc xxx.c -S demo.sip
gcc xxx.i -o demo内存
Mac下编译lua动态库,须要加上-dynamiclib -Wl,-undefined,dynamic_lookup,如编译ding.c,如下为Makefile里面文件内容:
linux:
#默认头文件头文件地址/usr/local/include
gcc ding.c -fPIC -shared -o ding.so
macosx:
gcc ding.c -fPIC -dynamiclib -Wl,-undefined,dynamic_lookup -shared -o ding.so -I/usr/local/include/lua
以上二者都能使部分函数自动inline。项目应该追求在O2的优化下能编译经过,若是在全局优化下,针对局部避免优化,能够尝试使用noinline 或 __attribute__((optimize(“O0”)))来修饰函数。