博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux中创建静态库和动态库
阅读量:6324 次
发布时间:2019-06-22

本文共 929 字,大约阅读时间需要 3 分钟。

1. 函数库有两种:静态库和动态库。

    静态库在程序编译的时候会被连接到目标代码中,程序运行时将不再需要改静态库。

   动态库中程序编译的时候并不会连接到目标代码中,而是在程序运行时才被载入,因此在程序运行的时候还需要动态库的存在。

程序1: hello.h

#ifndef HELLO_H
#define HELLO_H
void hello(const char *name);
#endif //HELLO_H

程序2: hello.c
#include 
void hello(const char *name)
{
        printf("Hello %s!\n", name);
}

程序3: main.c
#include "hello.h"
int main()
{
        hello("everyone");
        return 0;

显然直接编译main.c会报错,所以先要生成hello.h的静态库,根据hello.o来生成。

2.创建静态库,.a为后缀名

#gcc -c hello.c

#ar -rc libmyhello.a hello.o 或者 ar cr libmyhello.a hello.o

接着运行

# gcc -o main main.c libmyhello.a 或者 gcc -o main main.c -L. -lmyhello

#./main

hello everyone

删除静态库文件,程序运行正常。

3.创建动态库,扩展名为.so

#gcc -shared -fPIC -o libmyhello.so hello.o

动态库的编译

#gcc -o hello main.c -L. libmyhello.so

#./hello

/hello:error while loading shared libraries: libmyhello.so: cannot open shared object file: No such file or directory

出错了,提示是找不到动态库文件,程序运行时会在/usr/lib下面找这个动态库文件,找不到就会出错。

:可以将库文件拷贝到/usr/lib和目录下,运行即可。

转载地址:http://pnlaa.baihongyu.com/

你可能感兴趣的文章
使用CefSharp在.Net程序中嵌入Chrome浏览器(十)——独立文件夹部署
查看>>
BZOJ4598: [Sdoi2016]模式字符串(点分治 hash)
查看>>
docker中mysql数据库的数据导入和导出
查看>>
图片 base64转byte[]
查看>>
关于C#中async/await中的异常处理(下)-(转载)
查看>>
Java中使用同步关键字synchronized需要注意的问题
查看>>
(原創) 今晚重看中森明菜1988年的演唱会 (中森明菜) (日記)
查看>>
让你的Windows Mobile充当wifi路由 - WMWifiRouter
查看>>
常见证书格式和转换
查看>>
什么是.Net, IL, CLI, BCL, FCL, CTS, CLS, CLR, JIT
查看>>
Atlas Control ToolKit 发布
查看>>
神经网络和深度学习简史(一)
查看>>
世界是数字的
查看>>
袁创:使用反射动态调用ActiveX控件
查看>>
BZOJ 3532: [Sdoi2014]Lis (最大流)
查看>>
Dundas 系列
查看>>
Windows的命令行查看,修改,删除,添加环境变量
查看>>
iOS 图文混排
查看>>
Vue2 第四天学习(Vue的生命周期)
查看>>
1长数组使用
查看>>