您的位置:首页 > 运维架构 > Linux

linux 下动态库、静态库嵌套使用

2010-03-11 09:45 323 查看
linux下静态库嵌套使用

前提是你会在linux下调用静态库和动态库和Makfile编程(当然不会Makfile直接在终端命令也成)

本例是先由StringLen.h,StringLen.c生成librak.a

然后利用StringLen2.h,StringLen2.并调用librak.a生成librak2.a

最后利用StringLen3.h,StringLen3.c调用librak2.a 生成librak3.so

--------------------------------------------------------------------------------------

#StringLen.h:

#ifndef _STRINGLEN_H__

#define _STRINGLEN_H__

int Strlen(char *pStr);

#endif

#StringLen.c:

#include<stdio.h>

#include<assert.h>

#include "StringLen.h"

int Strlen(char *pStr)

{

unsigned long ulLength;

assert(NULL != pStr);

ulLength = 0;

while(*pStr++)

{

ulLength++;

}

return ulLength;

}

gcc -Wall -c *.c

ar rc librak.a *.o

------------------------------------------------------------------------------------

#StringLen2.h:

#ifndef _STRINGLEN_H2__

#define _STRINGLEN_H2__

#ifdef __UDT

#include "StringLen.h"

#endif

int Strlen2(char *pStr);

#endif

#StringLen2.c:

#include<stdio.h>

#include<assert.h>

#include "StringLen2.h"

int Strlen2(char *pStr)

{

unsigned long ulLength;

#ifdef __UDT

ulLength = Strlen(pStr);

#else

ulLength = -1;

#endif

return ulLength;

}

gcc -Wall -c *.c -D__UDT

ar rc librak2.a *.o

-----------------------------------------------------------------------------------------

#StringLen3.h:

#ifndef _STRINGLEN_H3__

#define _STRINGLEN_H3__

#ifdef ___UDT

#include "StringLen2.h"

#endif

int Strlen3(char *pStr);

#endif

#StringLen3.c

#include<stdio.h>

#include<assert.h>

#include "StringLen3.h"

int Strlen3(char *pStr)

{

unsigned long ulLength;

#ifdef ___UDT

ulLength = Strlen(pStr);

#else

ulLength = -1;

#endif

return ulLength;

}

Makefile:

vpath %.h ./Source

CXX=gcc

objects=StringLen3.o

CFLAGS_H=-I./Source

CFLAGS_D=-D___UDT

CFLAGS_O=$(CFLAGS_H) $(CFLAGS_D)

CFLAGS_SO=-L. -lrak2 -lrak $(CFLAGS_O)

libDll.so:$(objects)

$(CXX) -ggdb -fPIC -shared -o $@ $^ $(CFLAGS_SO)

StringLen3.o:StringLen3.c StringLen3.h

$(CXX) -c $< $(CFLAGS_O)

.PHONY:clean

clean:

@rm -r libDll.so *.o

--------------------------------------------------------------------------------

最后main.c调用libDll.so就ok了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: