linux动态链接库的生成与使用
demo的源码结构
src
├── app.c
├── dao.c
├── dao.h
└── makefile
app.c
#include<stdio.h> #include "dao.h" int main(){ printf("<< ----------------\n"); int rc = executeReader("hello"); printf(">> ----------------\n"); return rc; }
dao.h
int executeReader(char *cmdText);
dao.c
#include <stdio.h> int executeReader(char *cmdText){ printf("hello execute reader\n"); }
makefile
app : app.c libdao.so gcc $^ -o $@ libdao.so : dao.c gcc -shared $^ -o $@ .PHONY:run run : ./app .PHONY:clean clean : rm -rf *.so rm -rf app
执行:
$ make gcc -shared dao.c -o libdao.so gcc app.c libdao.so -o app $ make run ./app ./app: error while loading shared libraries: libdao.so: cannot open shared object file: No such file or directory make: *** [makefile:9: run] Error 127
windows下的动态链接库放到exe所在的目录会自动查找,但是linux这样不行,比较临时的方法是设置LD_LIBRARY_PATH变量
export LD_LIBRARY_PATH=`pwd`
如果是正式环境,linux下还可以复制到/usr/lib或者usr/local/lib下
修改好正常执行如下:
$ make run ./app << ---------------- hello execute reader >> ----------------
作者 :秋时
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。