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 >> ----------------
作者 :秋时
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述