linux 隐式调用 自己写的动态库

linux 隐式调用 自己写的动态库

分类: linux下c++编程 265人阅读 评论(0) 收藏 举报

~/test
|
|
|------main.c
|------lib
| |
| |------StringLen.h
| |------Strlen.c
| |------Strnlen.c

----------------StringLen.h:
#ifndef _STRINGLEN_H__
#define _STRINGLEN_H__

int Strlen(char *pStr);
int StrNlen(char *pStr, unsigned long ulMaxLen);
#endif
-------------------------------------------------

---------------Strlen.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;
}
-------------------------------------------------
---------------Strnlen.c:
#include<stdio.h>
#include<assert.h>
#include "StringLen.h"

int StrNlen(char *pStr, unsigned long ulMaxLen)
{
unsigned long ulLength;
assert(NULL != pStr);
if(ulMaxLen <= 0)
{
printf("Wrong Max Length!/n");
return -1;
}
ulLength = 0;
while(*pStr++ && ulLength < ulMaxLen)
{
ulLength++;
}
return ulLength;
}
-------------------------------------------------

生成动态库:
gcc -fpic -shared -o libStrlen.so Strlen.c
gcc -fpic -shared -o libStrnlen.so Strnlen.c
(生成动态库后,可以将Strlen.c Strnlen.c删除掉)

-----------------------main.c:
#include<stdio.h>
#include "StringLen.h"//静态库对应函数的头文件
int main(int argc, char* argv[])
{
char str[] = {"hello world"};
unsigned long ulLength = 0;
printf("The string is : %s/n", str);
ulLength = Strlen(str);
printf("The string length is:%lu (use Strlen)/n",ulLength);
ulLength = StrNlen(str, 10);
printf("The string length is:%lu (use StrNlen)/n", ulLength);
return 0;
}
-------------------------------------------------------
//编译main.c

gcc -Wall -I....../test/lib -o test1 main.c ....../lib/libStrlen.so (在指定路径时,相对路径和绝对路径都可以)
gcc -Wall -I....../test/lib -o test2 main.c ....../lib/libStrnlen.so (在指定路径时,相对路径和绝对路径都可以)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值