三省吾身,移植代码问题记录

2023-10-16 19:12:52 浏览数 (2)

最近移植原有的代码到瑞芯微平台,记录几个小问题,这几个问题有编译器差异导致的问题,也有代码本身的问题,确实代码细节是关键,不能疏忽大意!

1、C 函数 void*返回值没有返回, 触发munmap_chunk:invalid pointer;

2、mqtt-paho库,异常分支情况下MQTTClient_subscribe主题为空,导致mqtt主动断连,出现lost connect现象;

3、void *payload数据直接复制给string,尾巴出现多余字符;

代码语言:javascript复制
int msgarrvd(void* context, char* topic_name, int topicLen, MQTTClient_message* message)
{      
  if (topic_name == NULL || message == NULL) {
    return 0;
  }

  std::string str_topic = topic_name;
  char *data = (char *)malloc(message->payloadlen   1);
  if (data == NULL){
  	return 0;
  }
  memcpy(data, message->payload, message->payloadlen);
  data[message->payloadlen] = '';//增加结束符是关键
  std::string str_rcv = data;
  LOGD("Message arrived  topic: %sn,   len:%d  message:%sn ", topic_name, message->payloadlen, str_rcv.c_str());
  handler_message(str_topic, str_rcv);

  free(data);
  MQTTClient_freeMessage(&message);
  MQTTClient_free(topic_name);
  return 1;
}

4、为了调试上面的问题,着实费了些功夫,工欲善其事必先利其器,毕竟是在新的平台上,一个是gdb工具,另一个是抓包工具tcpdump;

代码语言:javascript复制
先编译termcap-1.3.1,编译完了,需要将.a放到arm-linux-gnueabihf命令所对应的libc.a的路径下

/home/abc/work/broadcast_app/gdb-7.8.1.tar/gdb-7.8.1
mkdir arm-gdb
#./configure --target=arm-linux-gnueabihf --host=arm-linux-gnueabihf --program-prefix=arm-linux-gnueabihf- 
CC=arm-linux-gnueabihf-gcc --prefix=$PWD/tmp
# make && make install

alientek@ubuntu:~/broadcast_app/app/thirds_libs_src/mqtt_prj/build$ cmake ../ -DCMAKE_TOOLCHAIN_FILE=
../cmake/arm-linux-setup.cmake 


#openh264等其他编译
make OS=linux CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g   ARCH=arm
/home/alientek/broadcast_app/app/thirds_libs_src/pjproject-2.12.1/third_party/openh264-2.3.1


#curl编译完了,需要将curl-config和curl同时放到/usr/sbin路径下,否则不能正常运行。

本文为呱牛笔记原创文章,转载无需和我联系,但请注明来自呱牛笔记 ,it3q.com

  • 上一篇: GoView使用体验
  • 下一篇: 正点原子RV1126 Linux开发板开箱指南

0 人点赞