当前位置: 技术问答>linux和unix
如何用AUTOMAKE生成动态链接库 .so 文件?
来源: 互联网 发布时间:2015-08-20
本文导语: 我在网上找了很久,都是一些扩展名是.la的 不知是做什么的,类似于windows 下的lib文件吗? 反而如何生成一个.so文件的,我实在是找不到。 在mysql源文件目录下找也未有结果.头都大了.... | ...
我在网上找了很久,都是一些扩展名是.la的 不知是做什么的,类似于windows 下的lib文件吗?
反而如何生成一个.so文件的,我实在是找不到。
在mysql源文件目录下找也未有结果.头都大了....
反而如何生成一个.so文件的,我实在是找不到。
在mysql源文件目录下找也未有结果.头都大了....
|
.la 的就是做动态联接库的
默认一般生成的.so 文件在 .libs 目录下,是个隐藏目录。
默认一般生成的.so 文件在 .libs 目录下,是个隐藏目录。
|
gcc -shared -fPLC main.c -0 -o main.so.0.0.0.1
-shared 是生成动态库, -fPLC这个参数是什么记不清了,就是生成独立的代码, -0是优化,但觉得测试时用-g比较好。-o是生成动态库,生成后做一个软符号连接到库路径中。例如,main.so 后面的版本号去掉。
-shared 是生成动态库, -fPLC这个参数是什么记不清了,就是生成独立的代码, -0是优化,但觉得测试时用-g比较好。-o是生成动态库,生成后做一个软符号连接到库路径中。例如,main.so 后面的版本号去掉。
|
-shared 说明生成动态库, -fPIC 表示生成位置无关代码(不加可能会导致加载时定位错误)
连接库生成执行文件的时候加参数 -rdynamic
连接库生成执行文件的时候加参数 -rdynamic
|
给个makefile的例子,以供参考:
OBJS=serv_pub.o proc_pub.o Thread.o
libDataProcess.so:$(OBJS)
g++ $(CFLAGS) -D T_DEBUG -D __LINUX__ -shared -fPIC -I ../Common -O2 -o libDataProcess.so $(OBJS) -lpthread -Wl,-rpath,./
serv_pub.o:
g++ $(CFLAGS) -D T_DEBUG -D __LINUX__ -fPIC -O2 -c -I ../Common serv_pub.cpp
proc_pub.o:
g++ $(CFLAGS) -D T_DEBUG -D __LINUX__ -fPIC -c -I ../Common proc_pub.cpp
TradeIni.o:
g++ $(CFLAGS) -D T_DEBUG -D __LINUX__ -fPIC -c -I ../Common TradeIni.cpp
clean:
rm -f *.o *.so
OBJS=serv_pub.o proc_pub.o Thread.o
libDataProcess.so:$(OBJS)
g++ $(CFLAGS) -D T_DEBUG -D __LINUX__ -shared -fPIC -I ../Common -O2 -o libDataProcess.so $(OBJS) -lpthread -Wl,-rpath,./
serv_pub.o:
g++ $(CFLAGS) -D T_DEBUG -D __LINUX__ -fPIC -O2 -c -I ../Common serv_pub.cpp
proc_pub.o:
g++ $(CFLAGS) -D T_DEBUG -D __LINUX__ -fPIC -c -I ../Common proc_pub.cpp
TradeIni.o:
g++ $(CFLAGS) -D T_DEBUG -D __LINUX__ -fPIC -c -I ../Common TradeIni.cpp
clean:
rm -f *.o *.so