链接库头文件:
head.h
class A
{
public:
A()
virtual ~A()
int gt()
int pt()
private:
int s
}
firstso.cpp
#include <iostream>
#include "head.h"
A::A(){}
A::~A(){}
int A::gt()
{
s=10
}
int A::pt()
{
std::cout<<s<<std::endl
}
编译命令如下:
g++ -shared -o libmy.so firstso.cpp
这时候生成libmy.so文件,将其拷贝到系统库里面:/usr/lib/
进行二次封装:
secso.cpp
#include <iostream>
#include "head.h"
extern "C"
{
int f()
int f()
{
A a
a.gt()
a.pt()
return 0
}
}
编译命令:
gcc -shared -o sec.so secso.cpp -L. -lmy
这时候生成第二个.so文件,此时库从一个类变敬链成了一个c的接口.
拷贝到/usr/lib
蔽稿差下面开始调用:
test.c
#include "stdio.h"
#include "dlfcn.h"
#define SOFILE "sec.so"
int (*f)()
int main()
{
void *dp
dp=dlopen(SOFILE,RTLD_LAZY)
f=dlsym(dp,"f")
f()
return 0
}
编译命令如下:
gcc -rdynamic -s -o myapp test.c
运行Z$./myapp
宏皮 10
$
用户需要调用标准库函数,调用前不用重新定义: 一般来说,在文件头加个预处理命令把库函数包含进来就行了郑颤,例如在c语言中就是用include。 在 C语言程序设计喊改败里,C 标准函数库(C Standard library)是歼明所有符合标准的头文件(head file)欢迎分享,转载请注明来源:内存溢出
评论列表(0条)