linux代码没左值,【已解决】用arm-xscale-linux-gnueabi编译代码出错:error: lvalue required as unary ‘’ operand...
【问题】
用arm-xscale-linux-gnueabi交叉编译代码,结果出错:.././Src/xxx.c:707:32: error: lvalue required as unary ‘&’ operand
【解决过程】
1.直接去看代码:
706和707行的代码是:xmlrpc_read_string(&env, pResult,
&(CONSTCHAR *) pMoteStateResponse);
所以,先去找找xmlrpc_read_string,参考:
其api是:void
xmlrpc_read_string(xmlrpc_env * const envP,
const xmlrpc_value * const valueP,
const char ** const stringValueP);
然后手动去改代码为:// xmlrpc_read_string(&env, pResult,
// &(CONSTCHAR *) pMoteStateResponse);
xmlrpc_read_string(&env, pResult,
&((CONSTCHAR *)pMoteStateResponse));
编译看看,是否有效,结果问题依旧。
2.参考了:
稍微更清楚这个lvalue=左值=左边的值了
注意到此处,已经定义了该变量为CONSTCHAR了:CONSTCHAR *pMoteStateResponse = NULL;
...
// xmlrpc_read_string(&env, pResult,
// &(CONSTCHAR *) pMoteStateResponse);
xmlrpc_read_string(&env, pResult,
&((CONSTCHAR *)pMoteStateResponse));
所以,去掉CONSTCHAR *,试试:// xmlrpc_read_string(&env, pResult,
// &(CONSTCHAR *) pMoteStateResponse);
xmlrpc_read_string(&env, pResult,
&pMoteStateResponse);
然后的确,消除了此问题了。
3.另外,看到:
所以,怀疑是:
gcc的bug,或者语法的兼容性问题,
即或许某个版本的gcc,是支持:CONSTCHAR *pMoteStateResponse = NULL;
...
&(CONSTCHAR *) pMoteStateResponse);
的写法的。
而我当前的,交叉编译器的版本是:CLi@PC-CLI-1 ~/develop/wihart_gateway_6_0/WBM/Build
$ arm-xscale-linux-gnueabi-gcc -v
Using built-in specs.
COLLECT_GCC=arm-xscale-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/home/CLi/develop/crosstool-ng/x-tools/arm-xscale-linux-gnueabi/libexec/gcc/arm-xscale-linux-gnueabi/4.6.0/lto-wrapper.exe
Target: arm-xscale-linux-gnueabi
Configured with: /home/CLi/develop/crosstool-ng/crosstool-ng-1.18.0_build/.build/src/gcc-4.6.0/configure --build=i686-build_pc-cygwin --host=i686-build_pc-cygwin --target=arm-xscale-linux-gnueabi --prefix=/home/CLi/develop/crosstool-ng/x-tools/arm-xscale-linux-gnueabi --with-sysroot=/home/CLi/develop/crosstool-ng/x-tools/arm-xscale-linux-gnueabi/arm-xscale-linux-gnueabi/sysroot --enable-languages=c,c++ --with-arch=armv5te --with-cpu=xscale --with-tune=xscale --with-float=softfp --with-pkgversion='crosstool-NG 1.18.0' --disable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp --disable-libquadmath --disable-libquadmath-support --with-gmp=/home/CLi/develop/crosstool-ng/crosstool-ng-1.18.0_build/.build/arm-xscale-linux-gnueabi/buildtools --with-mpfr=/home/CLi/develop/crosstool-ng/crosstool-ng-1.18.0_build/.build/arm-xscale-linux-gnueabi/buildtools --with-mpc=/home/CLi/develop/crosstool-ng/crosstool-ng-1.18.0_build/.build/arm-xscale-linux-gnueabi/buildtools --with-ppl=no --with-cloog=no --with-libelf=no --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --enable-threads=posix --enable-target-optspace --disable-nls --disable-multilib --with-local-prefix=/home/CLi/develop/crosstool-ng/x-tools/arm-xscale-linux-gnueabi/arm-xscale-linux-gnueabi/sysroot --enable-c99 --enable-long-long
Thread model: posix
gcc version 4.6.0 (crosstool-NG 1.18.0)
即4.6.0的gcc。而上面的bug提交,是4.7.0的gcc(中的g++)就有的。
不知道是否是:
升级成更高版本的(此处的交叉编译器的)gcc,就可以解决此问题?
但是,觉得也很奇怪的是,当前的代码,好像是:
别人之前用,更低版本的(交叉编译器)gcc:
gcc-3.4.5-glibc-2.3.6
就可以正常编译的。
所以,应该不是这方面的问题才对。
4.这里也是用4.7的gcc出了类似问题:
但是不知道如何解决。
5.参考:
去试试,手动用g++去编译试试,结果问题依旧。
6.去试试,会不会是因为多了个空格:// xmlrpc_read_string(&env, pResult,
// &(CONSTCHAR *) pMoteStateResponse);
xmlrpc_read_string(&env, pResult,
&(CONSTCHAR *) pMoteStateResponse);
改为:// xmlrpc_read_string(&env, pResult,
// &(CONSTCHAR *) pMoteStateResponse);
xmlrpc_read_string(&env, pResult,
&(CONSTCHAR *)pMoteStateResponse);
试试,结果还是出错。
【总结】
此处,只能是,把:CONSTCHAR *pMoteStateResponse = NULL;
...
xmlrpc_read_string(&env, pResult,
&(CONSTCHAR *) pMoteStateResponse);
改为:CONSTCHAR *pMoteStateResponse = NULL;
...
xmlrpc_read_string(&env, pResult,
&pMoteStateResponse);
而暂时解决此问题。
linux代码没左值,【已解决】用arm-xscale-linux-gnueabi编译代码出错:error: lvalue required as unary ‘’ operand...相关推荐
- linux c之gcc编译出现error:lvalue required as unary ‘‘ operand解决办法
1.问题 今天搞epoll实现io复用的时候gcc编译出现这个错误lvalue required as unary '&' operand,如下图 2.解决办法 accept函数参数如下 in ...
- Qt: error: lvalue required as unary ‘‘ operand错误解决
在写代码时,想对函数进行取值操作,就用了"&"符号进行取值操作,结果报了一个"Qt: error: lvalue required as unary '& ...
- CUDA out of memory.(已解决)+Windows和Linux查看占用显存的程序
参考链接:1.CUDA out of memory.(已解决)(有用有用) 2.Linux下查看CPU.内存占用率 Ubuntu下查看cuda占用情况&清除gpu占用&跑深度学习报错R ...
- linux ftp 没反应,【已回应】FTP无法使用怎么办
本帖最后由 Ethan1112 于 2019-1-4 11:49 编辑 刚刚又不知道为什么能链接上了 ,然后把文件下下来后修改再上传的时候发现又不行了 提交的时候说我有不良信息?不给提交?what?改 ...
- 已解决At least Windows 8.1 or Windows Server 2012 are required to install Python 3.9.4(64-bit)
已解决(window7安装Python失败)One or more issues caused the setup to fail.Please fix the issues and then ret ...
- 表达式必须是可修改的左值怎么解决_如何解决代码腐败的味道
一. Duplicated Code(重复代码) 如果你在一个以上的地点看到相同的程序结构,设法将他们合而为一,程序会变得更好. 同一个类的两个函数含有相同的表达式,采用Extract Method( ...
- linux中运行c找不到conio.h,Linux 下没有conio.h 已解决(示例代码)
原文:http://blog.sina.com.cn/s/blog_6a95e00b0100zqvf.html #include //#include void main(){ char ch; fo ...
- 【已解决】CentOS7等linux系统时区时间不对显示误差8小时
文章目录 问题 解决 处理时区问题 date查看时间.时区 timedatectl查看时间.时区 查看localtime 设置时区 处理时间问题 问题 中国使用的是东八区上海时间,而linux服务器, ...
- 华硕台式机安装linux进不去系统,[已解决]求助,无法进入系统
之前一直用arch系统盘,Windows系统盘是在另一台电脑上的,我另外一台电脑昨天摔了,我还以为是硬盘坏了,把这块windows硬盘换到这台华硕主板的电脑,发现硬盘没坏.我于是把windows硬盘从 ...
最新文章
- 【FPGA】单端口RAM的设计(异步读、异步写)
- 总编下午茶:挑战者心态能否帮助微软重回云计算巅峰?
- 聊一聊Java字符串的不可变
- (诊断)处理错误fatal error: Python.h: No such file or directory
- 提高电脑反应速度_宁美千元价电脑,一体机设计+21英寸屏,办公娱乐选它
- 一款java游戏伐木建造_伐木建造模拟器
- Spark之 使用SparkSql操作mysql和DataFrame的Scala实现
- Hadoop体系结构– YARN,HDFS和MapReduce
- python读二进制文件博客园_python二进制读写文件
- 【渝粤题库】陕西师范大学800000 地图学原理
- react自定义鼠标右键菜单
- 自带作弊功能的老虎机--一样会让你输光,呵呵
- cortex a8 java_ARM Cortex-
- 公安大数据应用之情报分析与关联挖掘
- 服务器centos系统诛仙,云服务器搭建诛仙教程
- 使用debussy出现的问题
- matlab做二元garch m,多元garch模型的matlab程序如何运行?能否举例说明下啊,希望高手指点...
- java输入长宽高计算表面积_设计一个C语言程序计算长方体体积和表面积,长宽高通过键盘输入?????...
- CentOS6.5X86_64系统定制文档详细版
- 【sdx62】QCMAP_CLI手动拨号操作说明