动态库:在windows下后缀为.dll ,在ubuntu下后缀为.so.
本文以封装的SOCKET为例:
xsocket:为被调用的动态库:xsocket.dll ,xsocket.so,xsocket.lib
tcpserver:调用动态库的可执行程序
1.在ubuntu 下构建目录:bin,src,lib,doc
2.win10 下用VS2019在一个解决方案中创建两个工程,并编译
动态库导出设置
3.ubuntu 下xsocket和tcpserver分别写makefike并编译
1.在ubuntu 下构建目录:bin,src,lib,doc
2.win10 下用VS2019在一个解决方案中创建两个工程,并编译
2.1 库文件xsocket 设置: 添加动态库导出宏
//在需要导出的类前面添加宏
#ifdef XSOCKET_EXPORTS
#define XSOCKET_API __declspec(dllexport)//导入
#else
#define XSOCKET_API __declspec(dllimport)//导出
#endif
class XSOCKET_API XTcp
{
};
2.2 tcpserver 调用xsocket
启动项目
项目依赖项
3.ubuntu 下xsocket和tcpserver分别写makefike并编译
3.1xsocket:makefile
#$+ 对应依赖项 $@对应目标 -fpic 代码与位置无关 -shared 编成动态库 -std=c++11
#tab键而非空格键
libxsocket.so:XTcp.cpp XTcp.h
g++ $+ -o $@ -fpic -shared -std=c++11
#复制到系统路径下:
cp *.so /usr/lib
3.2tcpserver:makefile
tcpserver:tcpserver.cpp
g++ $+ -o $@ -I../xsocket/xsocket -std=c++11 -lpthread -lxsocket -L../xsocket/xsocket
#../xsocket 头文件 -std=c++11 -lpthread 用来表明头文件的 -lxsocket 引用库名 -L../xsocket 增加了库路径
#-L查找动态链接库的路径
3.3运行的编译脚本
#直接在tcpserver目录下:run bash
export LD_LIBRARY_PATH=../xsocket
./tcpserver