.c文件又有:_psutil_linux.c,
.py文件有:_pslinux.py,
调用关系:_pslinux.py调用作为模块的_psutil_linux,模块名在_psutil_linux.c中的结构体标明
作为.so的编译命令如下:
1生成目标文件
gcc -pthread -fno-strict-aliasing -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -I/usr/include/python2.7 -c _psutil_linux.c -o _psutil_linux.o
2目标文件成为.so
gcc -pthread -shared -Wl,-z,relro _psutil_linux.o -o _psutil_linux.so
注意问题:
1添加的参数有减少依赖,减少编译错误必要
2编译中如果是找不到Python.h文件,应该是缺少了 python-devel,需要做的是:yum install python-devel
3编译报错dynamic module does not define init function,可能是少了上面的参数,重新编译。
把c文件通过混编,链接加入python库,称为是模块扩展:
gcc -pthread -fno-strict-aliasing -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -I/usr/include/python2.7 -c psutil/_psutil_linux.c -o build/temp.linux-x86_64-2.7/psutil/_psutil_linux.o
gcc -pthread -shared -Wl,-z,relro build/temp.linux-x86_64-2.7/psutil/_psutil_linux.o -L/usr/lib64 -lpython2.7 -o build/lib.linux-x86_64-2.7/_psutil_linux.so