使用自己封装的so时遇到了点问题,本着简便原则决定写个demo看看,顺便记录下整个过程。
1)生成so所需的文件如下:
print.h
#ifndef __print_h__
#define __print_h__void print(void);#endif
print.cpp
#include <stdio.h>
#include "print.h"void print(void)
{printf("hello world.\n");
}
bye.h
#ifndef __bye_h__
#define __bye_h__void bye(void);#endif
bye.cpp
#include <stdio.h>
#include "bye.h"void bye(void)
{printf("bye bye.\n");
}
midd.h
#ifndef __midd_h__
#define __midd_h__class Middleware{public:Middleware();~Middleware();bool data(const char *p);
};
#endif
midd.cpp
#include "print.h"
#include "bye.h"
#include "midd.h"
#include <stdio.h>Middleware::Middleware()
{printf("Middleware::Middleware()\n");
}Middleware::~Middleware()
{printf("Middleware::~Middleware()\n");
}bool Middleware::data(const char *p)
{print();bye();return true;
}
2)编译过程
g++ -c -fPIC -shared bye.cpp
g++ -c -fPIC -shared print.cpp
g++ -c -fPIC -shared midd.cpp
3)链接过程
g++ -o test.so midd.o print.o bye.o -fPIC -shared
4)动态链接库的使用
现在写一个main.cpp来调用so,看看效果
main.cpp
#include "midd.h"
int main()
{Middleware middleware;middleware.data("xxx");return 0;
}
生成可执行文件:
g++ -o test main.cpp ./test.so
测试:
./test
Middleware::Middleware()
hello world.
bye bye.
Middleware::~Middleware()