〖Linux〗Qt5.2.0+gsoap开发Android的NDK程序遇到错误的解决
2024-08-26 11:13:16
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) < )
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) < )
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
最新文章
- asp.net gridview 分页显示不出来的问题
- 我JSP学习心得1
- jquery学习方法
- 浅谈C++设计模式之单例模式
- Kinect For Windows V2开发日志二:Kinect V2的基本参数
- oracle 绿色版本 instantclient 使用说明
- UVA 753 A Plug for UNIX 电器插座(最大基数匹配,网络流)
- NewSQL——优化的SQL存储引擎(TokuDB, MemSQL)+?
- Android ImageView 图片设置为透明
- javascript 读取内联之外的样式(style、currentStyle、getComputedStyle区别介绍) (转载)
- Smarterer Test
- [转]JAVA自动装箱和拆箱
- Go 语言编写单元测试
- Android studio - Failed to find target android-18
- Angular 基本内置服务和筛选器
- iOS 中的屏幕旋转shouldAutorotate和supportedInterfaceOrientations的先后关系
- vim与程序员 vi/vim 的使用
- MVC5 您不能调用控制器“xx”上的操作方法“xx”,因为该方法是一种泛型方法
- Spring Boot(十四):spring boot整合shiro-登录认证和权限管理
- 解决eclipse/myeclipse导入项目时出现红色叹号的方法