zoukankan      html  css  js  c++  java
  • C++ 调用三方so库遇到的各种问题

    C++ 调用so库

    最近接了一个需求,在我们的业务中调用第三方.so库。

    在JAVA代码中通过jni调用时总是报错无法完成初始化。

    于是自己写了一个c++的demo,通过自己的demo来发现问题出在哪里。

    demo很简单,贴下源码:main.cpp

    extern "C" void TKW_Hello();
    
    int main(){
    	TKW_Hello();
    	return 0;
    }
    

    TKW_Hello();为三方.so库提供一个方法,其实三方库提供了很多方法,我先只验证一个方法。

    1.1、编译C++命令

    编译命令:

    g++ main.cpp libTKW_API.so -o main -pthread -lz
    

    遇到的问题主要分为两类根据不同的提示,看1.2和1.3。

    注:

    • libTKW_API.so 为第三方提供的资源。

    • pthread和-lz为了依赖系统资源,不用从当前目录加载。

    • 其实参数-pthread -lz也是遇到的问题,加上后就可以解决问题。

    1.2、缺少依赖包 error while loading shared libraries: libmpfr.so.4:cannot open shared object file:No such file or directory

    第一次编译后提示缺少依赖包。提示如下图:

    image

    1.2.1、通过命令查找所在安装包

    命令

    yum whatprovides libmpfr.so.4
    

    1.2.2、下载安装包

    通过官网下载缺省的包:mpfr-3.1.1-4.el7.i686

    官网地址:https://vault.centos.org/7.5.1804/os/x86_64/Packages/

    注意不同的系统版本官网地址不一样,根据自身系统的版本查询相应的地址。

    注:下载时还要是根据应用的服务器下载对应的版本。

    1.2.3、安装安装包

    将下载的安装包上传到内网服务器上目录中(我的目录在software)。

    在文件所在目录执行安装命令:

    rpm -Uvh *.rpm --nodeps --force
    

    安装完成后再次执行我们的编译命令,发现提示信息已经变了,说明我们安装类库成功。再根据提示解决相关的问题。

    1.2.4、总结

    遇到这么多依赖包的问题,其实就是gcc相关依赖包未安装全的导致的。可以批量下载安装。

    1.3、错误:对'gzopen'未定义的引用

    image

    1.3.1、在线安装zlib

    wget http://zlib.net/zlib-1.2.11.tar.gz
    tar zxvf zlib-1.2.11.tar.gz
    cd zlib-1.2.11.tar.gz
    ./configure
    make
    make install
    
    # 覆盖原版本,可以先备份一下原版本
    cp /usr/local/lib/libz.so.1 /lib/
    

    在安装zlib时也可能会报各种各样的错误,解决问题主要有两点:

    • 是安装包是否统一为32位或者64位。
    • gcc多个依赖包的版本是否一致。
  • 相关阅读:
    jQuery的选择器中的通配符[id^='code']
    chorme插件 ,在浏览器上模拟手机,pad 查看网页|前端技术开发必备插件
    http://hsax.kcpci.com:81/admin/login.aspx
    ashx页面返回json字符串|jQuery 的ajax处理请求的纠结问题
    用NPOI创建Excel、合并单元格、设置单元格样式、边框的方法
    DataTable 导入到Excel的最佳选择Npoi
    隐藏和显示服务器端控件以及Html控件
    JS只能输入数字,数字和字母等的正则表达式
    把本地表导入远程表
    [flex & bison]编译器杂谈
  • 原文地址:https://www.cnblogs.com/pengei/p/14760525.html
Copyright © 2011-2022 走看看