• 〖Linux〗Qt5.2.0+gsoap开发Android的NDK程序遇到错误的解决


    1.  error: cannot convert ‘int*’ to ‘hostent**’ for argument ‘5’ to..

     原因分析:

      缺少的宏定义,导致使用了错误的函数原型。

      被调用的函数是:

      gethostbyname_r(addr,&hostent,soap->buf,SOAP_BUFLEN,&soap->errnum)

      正确的调用函数应该是:

      gethostbyname_r(addr,&hostent,soap->buf,SOAP_BUFLEN,&host,&soap->errnum)

     解决方法:

     1)修改文件stdsoap2.h,找到如下片段(大约在837行的位置)

    /* Portability: define SOAP_SOCKLEN_T */
    #if defined(_AIX) || defined(AIX)
    # if defined(_AIX43)
    #  define SOAP_SOCKLEN_T socklen_t
    # else
    #  define SOAP_SOCKLEN_T int
    # endif
    #elif defined(SOCKLEN_T)
    # define SOAP_SOCKLEN_T SOCKLEN_T
    #elif defined(__socklen_t_defined) || defined(_SOCKLEN_T) || defined(CYGWIN) || defined(FREEBSD) || defined(__FreeBSD__) || defined(OPENBSD) || defined(__QNX__) || defined(QNX) || defined(OS390)
    # define SOAP_SOCKLEN_T socklen_t
    #elif defined(IRIX) || defined(WIN32) || defined(__APPLE__) || defined(SUN_OS) || defined(OPENSERVER) || defined(TRU64) || defined(VXWORKS) || defined(HP_UX)
    # define SOAP_SOCKLEN_T int
    #else
    # define SOAP_SOCKLEN_T size_t
    #endif

     修改为:

    /* Portability: define SOAP_SOCKLEN_T */
    #if defined(_AIX) || defined(AIX)
    # if defined(_AIX43)
    #  define SOAP_SOCKLEN_T socklen_t
    # else
    #  define SOAP_SOCKLEN_T int
    # endif
    #elif defined(SOCKLEN_T)
    # define SOAP_SOCKLEN_T SOCKLEN_T
    #elif defined(__socklen_t_defined) || defined(_SOCKLEN_T) || defined(CYGWIN) || defined(FREEBSD) || defined(__FreeBSD__) || defined(OPENBSD) || defined(__QNX__) || defined(QNX) || defined(OS390) || defined(__ANDROID__)
    # define SOAP_SOCKLEN_T socklen_t
    #elif defined(IRIX) || defined(WIN32) || defined(__APPLE__) || defined(SUN_OS) || defined(OPENSERVER) || defined(TRU64) || defined(VXWORKS) || defined(HP_UX)
    # define SOAP_SOCKLEN_T int
    #else
    # define SOAP_SOCKLEN_T size_t
    #endif

     2)修改文件stdsoap2.cpp,找到如下片段(大约在3698行的位置)

    #if defined(__GLIBC__) || (defined(HAVE_GETHOSTBYNAME_R) && (defined(FREEBSD) || defined(__FreeBSD__)))
      if (gethostbyname_r(addr, &hostent, soap->buf, SOAP_BUFLEN, &host, &soap->errnum) < 0)
        host = NULL;

     修改为:

    #if defined(__GLIBC__) || (defined(HAVE_GETHOSTBYNAME_R) && (defined(FREEBSD) || defined(__FreeBSD__))) || defined(__ANDROID__)
      if (gethostbyname_r(addr, &hostent, soap->buf, SOAP_BUFLEN, &host, &soap->errnum) < 0)
        host = NULL;

    2. Cannot find Android tool: "/opt/android/sdk/tools/android"

     原因分析:

      Qt搜索了默认的Android SDK目录,即使你指定了新的路径也可能会报这个错

     解决办法:

      假定安装的Android SDK目录是/media/Source/android-sdk-linux,在终端输入命令

      sudo mkdir -p /opt/android

      sudo ln -s /media/Source/android-sdk-linux /opt/android/sdk

  • 相关阅读:
    Odoo 库存管理-库存移动(Stock Move)新玩法
    odoo8.0+PyCharm4.5开发环境配置
    (总结)隐藏PHP版本与PHP基本安全设置
    Docker无法启动 Could not find a free IP address range for interface 'docker0' 最方便的解决办法
    MySQL Point in Time Recovery the Right Way
    The query below helps you to locate tables without a primary key:
    记一次揪心的MySQL数据恢复过程
    Linux中利用extundelete恢复误删除的数据
    Centos升级Python 2.7并安装pip、ipython
    navicat
  • 原文地址:https://www.cnblogs.com/scue/p/3480423.html
Copyright © 2020-2023  润新知