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
>> ----------------

 

posted on   Netsharp  阅读(92)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述

导航

统计

点击右上角即可分享
微信分享提示