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


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


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


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


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

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] = '\0';//增加结束符是关键
  std::string str_rcv = data;
  LOGD("Message arrived  topic: %s\n,   len:%d  message:%s\n ", 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;

先编译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

请先登录后发表评论
  • 最新评论
  • 总共0条评论