代码部分的说明请参考上一篇 http://blog.csdn.net/zdy10326621/article/details/38470285
这一部分组要的是.so的生成和链接使用
#makefile文件
obj = program.c
libobj=lib.h bill.c fred.c
libpath=/home/zengdengyi/桌面/liunx/linux/chapter01/libtest.so
#all 表示执行这两个命令
all:libtest program
libtest:$(libobj)
@gcc $(libobj) -fPIC -shared -o libtest.so
program: $(obj)
@gcc $(obj) -L. $(libpath) -o program
gcc $(libobj) -fPIC -shared -o libtest.so 这个命令表示将lib.h bill.c fred.c 这三个文件编译成.so库
gcc $(obj) -L. $(libpath) -o program 将program.c和.so库文件编译成可执行文件program
网上看到的多数使用
gcc $(obj) -L. -ltest -o program 这可以编译生成test可移文件program
但是在ldd program 产看链接是否承购的时候都是会报错找不到.so库
问度娘看了一堆高手的文章知道是个什么原因,但是在linux下配置环境变量,这对菜鸟来说还是很吃力的,所以可以直接的把路径写死
libpath=/home/xxx/桌面/liunx/linux/chapter01/libtest.so
这就是我项目所在文件的路径,.so就在这里
当然在高手眼里这很菜,但是对于菜鸟来说能最简单的看到效果就是学习的动力,就想搞懂一个问题,结果绕出N多个问题得不偿失,
有动力了才有耐心一个个问题解决
makefile文件只要换成你电脑项目所在的路径就可以直接make
生成可执行程序program
ldd program 也不会报找不到动态库的路径的问题证明链接动态库成功
当然想看运行结果还是需要使用gdb program
run
运行结果
quit
退出gdb
linux 下编译最简单的.so就这样了