织梦CMS - 轻松建站从此开始!

罗索

当前位置: 主页>嵌入式开发>Android>

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

落鹤生 发布于 2014-03-12 22:14 点击:次 
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,so
TAG: ONVIF  gsoap  

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行的位置)

  1. /* Portability: define SOAP_SOCKLEN_T */ 
  2. #if defined(_AIX) || defined(AIX) 
  3. # if defined(_AIX43) 
  4. #  define SOAP_SOCKLEN_T socklen_t 
  5. # else 
  6. #  define SOAP_SOCKLEN_T int 
  7. # endif 
  8. #elif defined(SOCKLEN_T) 
  9. # define SOAP_SOCKLEN_T SOCKLEN_T 
  10. #elif defined(__socklen_t_defined) || defined(_SOCKLEN_T) || defined(CYGWIN) \
  11.  || defined(FREEBSD) || defined(__FreeBSD__) || defined(OPENBSD) \
  12. || defined(__QNX__) || defined(QNX) || defined(OS390) 
  13. # define SOAP_SOCKLEN_T socklen_t 
  14. #elif defined(IRIX) || defined(WIN32) || defined(__APPLE__) || defined(SUN_OS) \
  15. || defined(OPENSERVER) || defined(TRU64) || defined(VXWORKS) || defined(HP_UX) 
  16. # define SOAP_SOCKLEN_T int 
  17. #else 
  18. # define SOAP_SOCKLEN_T size_t 
  19. #endif 

修改为:

  1. /* Portability: define SOAP_SOCKLEN_T */ 
  2. #if defined(_AIX) || defined(AIX) 
  3. # if defined(_AIX43) 
  4. #  define SOAP_SOCKLEN_T socklen_t 
  5. # else 
  6. #  define SOAP_SOCKLEN_T int 
  7. # endif 
  8. #elif defined(SOCKLEN_T) 
  9. # define SOAP_SOCKLEN_T SOCKLEN_T 
  10. #elif defined(__socklen_t_defined) || defined(_SOCKLEN_T) || defined(CYGWIN) \
  11. || defined(FREEBSD) || defined(__FreeBSD__) || defined(OPENBSD) \
  12. || defined(__QNX__) || defined(QNX) || defined(OS390) || defined(__ANDROID__) 
  13. # define SOAP_SOCKLEN_T socklen_t 
  14. #elif defined(IRIX) || defined(WIN32) || defined(__APPLE__) || defined(SUN_OS) \
  15. || defined(OPENSERVER) || defined(TRU64) || defined(VXWORKS) || defined(HP_UX) 
  16. # define SOAP_SOCKLEN_T int 
  17. #else 
  18. # define SOAP_SOCKLEN_T size_t 
  19. #endif 

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

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

修改为:

  1. #if defined(__GLIBC__) || (defined(HAVE_GETHOSTBYNAME_R) && (defined(FREEBSD) \
  2. || defined(__FreeBSD__))) || defined(__ANDROID__) 
  3.   if (gethostbyname_r(addr, &hostent, soap->buf, SOAP_BUFLEN, &host, &soap->errnum) < 0) 
  4.     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

(scue)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201403/16928.html]
本文出处:博客园 作者:scue 原文
顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------
相关文章
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容