不是原创,点错了,找不到在哪里改成转载,可随时删。
转载于https://blog.youkuaiyun.com/qq_50832904/article/details/121646771
C动态库的生成
一个判断加法对错的函数 add.c
int add(int x, int y, int z)
{
if (z == x + y) return 1;
return 0;
}
一个头文件add.h
int add(int x, int y, int z);
生成add.o文件
gcc -c -fpic add.c
注意此处需要root权限,否则会有如下报错:
Assembler messages:
Fatal error: can't create add.o: Permission denied
生成libadd.so动态库
gcc -shared add.o -o libadd.so
现在可以把add.h和libadd.so提供给客户。
客户端 C动态库的调用测试
新建一个工程,写一个main.c,将.h文件和main.c函数放到同一目录下。(.so文件后续会提到)
#include<stdio.h>
#include "add.h"
int main() {
int a = 1, b = 2, c = 4;
int flag = add(a, b, c)
printf("\nFlag is %d.\n", flag);
return flag;
}
编译main.c
gcc main.c -o main -ladd
此处会报错
/usr/bin/ld: cannot find -ladd: No such file or directory
collect2: error: ld returned 1 exit status
解决办法:将动态库文件拷贝到系统库目录/usr/lib
sudo cp libadd.so /usr/lib
执行成功
打印
Flag is 0.