文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>共享库的实现

共享库的实现

时间:2007-01-10  来源:白石

多模块都会调用的函数,最好做成共享库的形式,精简代码,又能防止出错。

//以下是example.c部分,假设位于lib目录下

#include "example.h"

int fun1( void )
{
    ;//从略

}

 

//以下是example.h部分,假设位于lib目录下


extern int fun1( void );

 

//以下是共享库的makefile,假设位于lib目录下


################OPTION###################
#CCOMPILE = gcc
CCOMPILE = /usr/local/arm/2.95.3/bin/arm-linux-gcc
#CPPCOMPILE = g++
CPPCOMPILE = /usr/local/arm/2.95.3/bin/arm-linux-g++
COMPILEOPTION = -fPIC -Wall -g -c
INCLUDEDIR =
#LINK = gcc
LINK = /usr/local/arm/2.95.3/bin/arm-linux-gcc
LINKOPTION = -g -shared -Wl,-soname,libsharefun.so.0 -o libsharefun.so.0.0 -lc -Wall

LIBDIRS =
OBJS = fun1.o

OUTPUT = example
SHAREDLIB =
APPENDLIB =

################OPTION END################

$(OUTPUT):$(OBJS) $(APPENDLIB)
    $(LINK) $(LINKOPTION) $(LIBDIRS) $(OBJS) $(SHAREDLIB) $(APPENDLIB)
    ln -sf libsharefun.so.0.0 libsharefun.so.0
    ln -sf libsharefun.so.0 libsharefun.so
clean:
    rm -f $(OBJS)
    rm -f $(OUTPUT)
all: clean $(OUTPUT)
.PRECIOUS:%.cpp %.c %.C
.SUFFIXES:
.SUFFIXES: .c .o .pc .ec .cc

.c.o:
    $(CCOMPILE) -c -o $*.o $(COMPILEOPTION) $(INCLUDEDIR) $*.c
    
.cc.o:
    $(CCOMPILE) -c -o $*.o $(COMPILEOPTION) $(INCLUDEDIR) $*.cpp

 

 

//以下是其它模块调用共享库的方式,假设位于program目录下,与lib同级

#include "../lib/example.h"

int main()
{
    //初始化

    fun1();//直接调用,和调用一般函数一样

    while(1)
    {
         //主线程处理函数

    }
}

 

 

//以下是模块的makefile,假设位于program目录下


################OPTION###################
#CCOMPILE = gcc
CCOMPILE = /usr/local/arm/2.95.3/bin/arm-linux-gcc
#CPPCOMPILE = g++
CCOMPILE = /usr/local/arm/2.95.3/bin/arm-linux-gcc
COMPILEOPTION = -c -Wall
INCLUDEDIR =
#LINK = gcc
LINK =    /usr/local/arm/2.95.3/bin/arm-linux-gcc
LINKOPTION = -O2 -D_REENTRANT -o main -lpthread -lsharefun -L../lib -Wall

LIBDIRS =
OBJS = main.o

OUTPUT = main
SHAREDLIB =
APPENDLIB =

################OPTION END################

$(OUTPUT):$(OBJS) $(APPENDLIB)
    $(LINK) $(LINKOPTION) $(LIBDIRS) $(OBJS) $(SHAREDLIB) $(APPENDLIB)

clean:
    rm -f $(OBJS)
    rm -f $(OUTPUT)
all: clean $(OUTPUT)
.PRECIOUS:%.cpp %.c %.C
.SUFFIXES:
.SUFFIXES: .c .o .pc .ec .cc

.c.o:
    $(CCOMPILE) -D_REENTRANT -c -o $*.o $(COMPILEOPTION) $(INCLUDEDIR) $*.c
    
.cc.o:
    $(CCOMPILE) -c -o $*.o $(COMPILEOPTION) $(INCLUDEDIR) $*.cpp

 

下载到目标板后,必须将库文件lib*.so、lib*.so.0、lib*.so.0.0下载到/usr/local/lib/目录下,模块才能正确启动

 

相关阅读 更多 +
排行榜 更多 +
蜘蛛侠忍者英雄

蜘蛛侠忍者英雄

飞行射击 下载
动物大捣蛋

动物大捣蛋

休闲益智 下载
保卫萝卜4内购正式版

保卫萝卜4内购正式版

休闲益智 下载