自己开发的so库如何测试其兼容性

现在工作项目需要都是C/C++ ,开发提供的是so库,因此除了正常功能外,其so库与其他so库兼容性也要进行测试(因为使用so库发现与libmysqlclient.so 编译会错误,因此给测试部门提出测试其兼容性)

目前使用场景确定的是各数据库的so库

一、基础知识学习

但是本人小白对着根本不理解?,因此从gcc 命令开始学习

1、gcc 是什么?书面介绍含义  GNU Compiler Collection, c语言或其他语言编译器

2、so是什么?  so是linux下的程序函数库,类似于Windows下dll。so就是动态链接库是c/C++编译出来的。一般来说so文件无法直接运行。

3、gcc  常用的命令含义

使用gcc 编译器时,必须给出一系列必要的调用参数和文件名称,不同参数的先后顺序对执行结果没有影响,只有在使用同类参数时的先后顺序才需考虑。若使用多个-L参数,gcc会根据-L参数的先后顺序来执行相应的库目录。

gcc  [options] [filenames]

-c :只进行编译,不链接成可执行文件。编译器只是由输入的.c等源文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件

-o out_filename :确定输出文件的名称为out_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc 默认给很粗可执行文件a.out

目前执行过相关命令 gcc test.c libhs.so

-g: 产生符号调试工具(gdb),如果你需要对源码进行调试可以尝试使用这个命令。(目前没用到)

-O :对程序进行优化编译链接,采用这个厢,整个源代码会在编译链接中进行优化处理,这样产生的可执行文件的效率更高,但是编译链接的速度相应要慢一些。

-O2: 比-O更好的优化编译、链接

下面是我看的这个大牛的详细解释:

二、编写程序,测试自己so库与常见so库的兼容性

1、测试libXX.so库与  libmysqlite3.so的兼容性

  • 安装 sudo apt-get install sqlite3
  • 安装 sudo apt-get install libsqlite3-dev

同时将libmysqlite3.so库文件存放在/usr/lib/x86_64-linux-gnu目录下

CMakeLists.txt中添加

link_libraries(mysqlclient)

在代码中添加下面部分的代码:

#include “sqlite3.h”
int len;
sqlite3 *db=NULL;
len=sqlite3_open("ndslib.db",&db);
if(len)
 {
   printf("connect success!\n");
 }

然后进行编译、执行,查看是否可正确链接数据库:

2、测试libXX.so库与  libmysqlclient.so的兼容性

安装musql 数据库相关库:

          sudo apt-get install mysql-server

          sudo apt isntall mysql-client

          sudo apt install libmysqlclient-dev

将libmysqlclient.so库存放在/usr/lib/x86_64-linux-gnu目录下

 CMakeLists.txt中添加

link_libraries(sqlite3)

在原来可正确执行的测试程序中添加下面代码:

#include"mysql/mysql.h"

MYSQL conn;
mysql_init(&conn);
if(!mysql_real_connect(&conn,"172.X.x.X","root","root","sdfapi_test",3306,0,0))
{
  printf("Connect to DB fail!\n");
}
else
{
   printf("Connect to DB success!\n");
}

然后进行编译,发现没有问题,但是执行的时候就会有错误,此部分应该是被测试的so库有变量冲突(或者其他原因,具体原因需要开发去定位问题)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值