# shard library
https://medium.com/fcamels-notes/linux-%E7%B7%A8%E8%AD%AF-shared-library-%E7%9A%84%E6%96%B9%E6%B3%95%E5%92%8C%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85-cb35844ef331
https://aben20807.blogspot.com/2018/08/1070825-c-static-shared.html
main.c
```c=
#include "foo.h"
int main (void){
foo();
return 0;
}
```
foo.h
```c=
#ifndef FOO_H
#define FOO_H
void foo();
#endif
```
foo.c
```c=
#include "foo.h"
#include <stdio.h>
void foo(){
printf("call foo\n");
}
```
```bash=
gcc -g -fPIC -c foo.c
gcc -shared foo.o -o libfoo.so
gcc -g -o main main.c libfoo.so
or
gcc -g -o main main.c -lfoo -L.
sudo cp ./libfoo.so /usr/lib/
sudo rm /usr/lib/libfoo.so
```
# openmp
```c=
#include "foo.h"
#include <stdio.h>
void foo(){
#pragma omp parallel
{
printf("start!\n");
}
printf("call foo\n");
int i ;
int n=10;
double s =0.0;
omp_set_num_threads(4);
#pragma omp parallel for reduction(+:s)
for(i = 0 ; i<n ; ++i) {
printf("threads %d\n", omp_get_thread_num());
s+=i;
}
printf("%f\n",s);
}
```
```bash=
gcc -g -fPIC -Wall -fopenmp -c foo.c
gcc -shared -fopenmp foo.o -o libfoo.so
gcc -g -o main main.c -lfoo -L.
```
