1 静态库
main.c
#include
#include
#include "add.h"
int main(int argc, char **argv)
{
int a = atoi(argv[0]);
int b = atoi(argv[1]);
int ans = add(a, b);
printf("%d\n", ans);
return 0;
}
add.c
int add(int a, int b)
{
return a + b;
}
add.h
int add(int, int);
run.sh
#!/bin/bash
#
gcc -c -o add.o add.c
ar -crs libadd.a add.o
gcc -o main main.c -L. -ladd
命令行输入
chmod +x run.sh
./run.sh
./main 3 4
结果为7
2动态库 同样是main.c add.h add.c
run.sh
#!/bin/bash
#
gcc -c -fpic -o add.o add.c
gcc -shared -o libadd.so add.o
gcc -o main main.c -L. -ladd -Wl,-rpath=.
命令行输入
./run.sh
./main 3 5
结果为8
3 运行库
main.c
#include
#include
#include
#include "add.h"
int main(int argc, char **argv)
{
void *lib_handle;
int (*fn)();
char *error;
lib_handle=dlopen(argv[3], RTLD_LAZY);
if (!lib_handle) {
fprintf(stderr, "%s\n", dlerror());
return 1;
}
fn = dlsym(lib_handle, "add");
if ((error=dlerror())!=NULL) {
fprintf(stderr, "%s\n", error);
return 1;
}
int a = atoi(argv[1]);
int b = atoi(argv[2]);
int ans = fn(a, b);
printf("%d\n", ans);
dlclose(lib_handle);
return 0;
}
run.sh
#!/bin/bash
#
gcc -c -fpic -o add.o add.c
gcc -shared -o libadd.so add.o
gcc -o main main.c -ldl -L. -ladd
命令行输入
./main 4 5 ./libadd.so
结果为9