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 2022-05-04 18:20  Netsharp  阅读(89)  评论(0编辑  收藏  举报

导航