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

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了

你可能感兴趣的:(编程,linux,gcc,null,makefile,终端)