cmake很简单的故障问题,怎么解决
1个回答
2017-11-16
展开全部
1.开始的时候着实折腾了好长时间,一直以为是代码的问题,所以就在代码中进行了跟踪,结果怎么都找不到问题,后来就是这份代码,直接make后,替换原有的系统的协议库,发现代码没有问题,排除了代码问题。这个问题花时间很久大概有一天时间。
2.发现是编译方式不同导致的问题后,对两个文件进行了对比,发现使用Cmake编译出来的可执行文件是“no stripped”,以为是这个原因,后来就解决strip可执行文件的问题,在网上又是一顿狂找,最终使用“add_custom_command”定制命令的方式得到了解决,满心欢喜的看到所有应用文件都stripped了,满心以为这下可好了,但是替换以后仍然通讯异常,这个过程大概花了半天时间。
3.问题得不到解决很郁闷,继续对比两个文件的差异,发现即使是stripped以后,使用CMake编译出来的的文件仍然比直接使用Makefile文件make出来的文件要大不少,这些得到了一些启示,去看了下Makefile文件。通过查看Makefile和对比CMakeLists.txt文件发现,Makefile中的编译采用的宏控制,输出的是Release版本,而CMakeLists.txt中默认的输出Debug版本。找到问题所在了以后,直接又从网上找到“SET(CMAKE_BUILD_TYPE Release ON)”的方式进行了Release版本设置。
4.后来还发现CMakeLists.txt中的编译选项也是采用的默认方式,而Makefile中却有使用,所以干脆就直接将编译选项也直接拿过来。
SET(CMAKE_C_FLAGS "-O2 -pipe -fPIC -Wall -fmessage-length=0")
SET(CMAKE_CXX_FLAGS "-O2 -pipe -fPIC -Wall -fmessage-length=0")
5.然后直接进行了编译,看到编译后的应用果然文件大小又小了很多,这下觉得没有问题了,进行整体更换,reboot系统,查看模拟器与设备的通讯情况,正常。ok,这一天算是没有白费,将正常后的CMakeLists.txt都更新到svn中。
2.发现是编译方式不同导致的问题后,对两个文件进行了对比,发现使用Cmake编译出来的可执行文件是“no stripped”,以为是这个原因,后来就解决strip可执行文件的问题,在网上又是一顿狂找,最终使用“add_custom_command”定制命令的方式得到了解决,满心欢喜的看到所有应用文件都stripped了,满心以为这下可好了,但是替换以后仍然通讯异常,这个过程大概花了半天时间。
3.问题得不到解决很郁闷,继续对比两个文件的差异,发现即使是stripped以后,使用CMake编译出来的的文件仍然比直接使用Makefile文件make出来的文件要大不少,这些得到了一些启示,去看了下Makefile文件。通过查看Makefile和对比CMakeLists.txt文件发现,Makefile中的编译采用的宏控制,输出的是Release版本,而CMakeLists.txt中默认的输出Debug版本。找到问题所在了以后,直接又从网上找到“SET(CMAKE_BUILD_TYPE Release ON)”的方式进行了Release版本设置。
4.后来还发现CMakeLists.txt中的编译选项也是采用的默认方式,而Makefile中却有使用,所以干脆就直接将编译选项也直接拿过来。
SET(CMAKE_C_FLAGS "-O2 -pipe -fPIC -Wall -fmessage-length=0")
SET(CMAKE_CXX_FLAGS "-O2 -pipe -fPIC -Wall -fmessage-length=0")
5.然后直接进行了编译,看到编译后的应用果然文件大小又小了很多,这下觉得没有问题了,进行整体更换,reboot系统,查看模拟器与设备的通讯情况,正常。ok,这一天算是没有白费,将正常后的CMakeLists.txt都更新到svn中。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询