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了
前提是你会在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生成和使用静态库和动态库详解
- Linux下Gcc生成和使用静态库和动态库详解(转)
- Linux下GCC生成和使用静态库和动态库详解(一)
- Linux下静态库和动态库的创建和使用
- 技巧:Linux 动态库与静态库制作及使用详解
- linux 下静态库和动态库的创建,编译,和使用
- 技巧:Linux 动态库与静态库制作及使用详解
- 在Linux下如何使用GCC编译程序、简单生成静态库及动态库。
- Linux下Gcc生成和使用静态库和动态库详解
- Linux 下 Gcc 生成和使用静态库和动态库详解
- (笔记)Linux下的静态库和动态库使用详解
- Linux 动态库与静态库制作及使用详解
- linux中静态库和动态库的创建和使用
- (zz)Linux下Gcc生成和使用静态库和动态库详解
- Linux下Gcc生成和使用静态库和动态库详解(转)
- Linux下动态库、静态库的生成与使用
- linux下c/c++编译器和调试器以及静态库、动态库使用汇总
- 【Linux】使用gcc生成静态库和动态库
- Linux下Gcc生成和使用静态库和动态库详解(转)
- Linux下g++编译与使用静态库和动态库