zoukankan      html  css  js  c++  java
  • 〖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

  • 相关阅读:
    对Spring的简单理解
    对Hibernate的简单认识
    对Struts的简单理解
    浅谈实体类
    xdebug配置
    hosts文件修改完无效的解决办法
    CentOS6.4 中文输入法
    python加密解密
    windows运行命令大全
    vm虚拟机centos文件共享目录设置
  • 原文地址:https://www.cnblogs.com/scue/p/3480423.html
Copyright © 2011-2022 走看看