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多个依赖包的版本是否一致。
  • 相关阅读:
    Java并发编程:volatile关键字解析
    多线程之指令重排序
    《paste命令》-linux命令五分钟系列之二十
    《cut命令》-linux命令五分钟系列之十九
    《ln命令》-linux命令五分钟系列之十八
    Clone Graph
    House Robber
    《wc》-linux命令五分钟系列之十七
    who am i
    《man男人》-linux命令五分钟系列之十五
  • 原文地址:https://www.cnblogs.com/pengei/p/14760525.html
Copyright © 2011-2022 走看看