当前位置: 技术问答>linux和unix
请问怎样生成动态连接库?unix/c
来源: 互联网 发布时间:2014-12-30
本文导语: 怎样将c文件编译成.so,程序里需要特殊处理吗? 编译怎样做? 谢谢! | 文件为xxx.c 1。静态库 gcc -c xxx.c ar crv libxxx.a xxx.o 使用 gcc -o demo demo.c -L libxxx.a的路径 -lxxx 2。动态库 gcc -c -fPIC -Wall xx...
怎样将c文件编译成.so,程序里需要特殊处理吗?
编译怎样做?
谢谢!
编译怎样做?
谢谢!
|
文件为xxx.c
1。静态库
gcc -c xxx.c
ar crv libxxx.a xxx.o
使用
gcc -o demo demo.c -L libxxx.a的路径 -lxxx
2。动态库
gcc -c -fPIC -Wall xxx.c
gcc -shared -Wl,-soname,libxxx.so.1 -o libxxx.so.1 xxx.o -lc
#include
void *dlopen(const char *filename, int flag);
const char *dlerror(void);
void *dlsym(void *handle, char *symbol);
int dlclose(void *handle);
1。静态库
gcc -c xxx.c
ar crv libxxx.a xxx.o
使用
gcc -o demo demo.c -L libxxx.a的路径 -lxxx
2。动态库
gcc -c -fPIC -Wall xxx.c
gcc -shared -Wl,-soname,libxxx.so.1 -o libxxx.so.1 xxx.o -lc
#include
void *dlopen(const char *filename, int flag);
const char *dlerror(void);
void *dlsym(void *handle, char *symbol);
int dlclose(void *handle);
|
程序的写法是相同的,支不过编译的的方式是不同的,呵呵
//add.c
int add2int(int i1, int i2)
{
return i1 + i2;
}
动态库
gcc -Wall -fPIC -c add.c
gcc -Wall -shared -Wl,-soname,add.so -o add.so add.o -lc
//add.c
int add2int(int i1, int i2)
{
return i1 + i2;
}
动态库
gcc -Wall -fPIC -c add.c
gcc -Wall -shared -Wl,-soname,add.so -o add.so add.o -lc
|
不同的系统是不一样的cc选项,sco openserver 下为
cc -g add.c
cc -G add.o -o libadd.so
cc -g add.c
cc -G add.o -o libadd.so
|
看编译器的帮助,比如man gcc,会告诉你哪个命令选项是生成动态库的。