将开源libosmscout移植到QNX遇到的问题和解决方法

来源:互联网 发布:php常用扩展 编辑:程序博客网 时间:2024/05/16 15:13

大费周章将libosmscout在vs平台上编译成功了,虽然已经有了readme编译手册,但是其依赖的其他开源库较多,一点的差错都不能有。

若将libosmscout移植到QNX,一个新的平台上,发生什么意外都不奇怪了。所以libosmscout里几个工程,只选取最基本的,不依赖其他库的libosmscout工程进行移植。


这里总结下移植过程中遇到的问题:

1. 随时准备调整config.h和CoreFeatures.h文件中的预定义

在linux平台上,这两个文件时由autoconf根据参数和环境生成的。里面是与头文件相关的预定义的宏。不同的环境,其宏定义可能也不同。如

/* Define to 1 if you have the declaration of `log2(double)', and to 0 if you   don't. */#undef HAVE_DECL_LOG2/* Define to 1 if you have the <dlfcn.h> header file. */#define HAVE_DLFCN_H 1/* Define to 1 if you have the <inttypes.h> header file. */#define HAVE_INTTYPES_H 1

好在有注释说明,比较好理解。

其中费了一天 的功夫去理解其参数文件configure.ac,对宏定义修改有点帮助,但希望能直接弄明白宏定义的设置与要求的心思白费了。


2. 有关支持SSE, SSE2的部分,若设置编译选项__SSE__, __SSE2__,出现__buildin_ia32_***之类的错误时,应用-msse, -msse2替代__SSE__, __SSE2__,基本好用。原因大概是__SSE__, __SSE2__支持32位运算时没有问题,但对支持AMD 64运算时,需要应用扩展的设置-msse, -msse2。


3. 将头文件,源文件直接整个放入新建的QNX工程,编译,竟出现了上千个错误,很多是QNX内部头文件的错误,原因不明,原以为是config.h和CoreFeature.h中的宏设置的问题,努力折腾了两天,修改尝试了很多次,无功而返。


4. 无奈下,新建QNX工程,将libosmscout的文件逐个或分批加入新的QNX工程。在配置与以前中的QNX相同的情况下,编译错误大大减少,且有章可循。

在QNX中,常用的math函数,stdio中的输入输出函数,都需要在前面加上std域,如log,printf,exit等。否则,会出现无声明的错误。

time函数,需要指定include下的time.h,而不能是sys/time.h,否则time函数无声明。

其他编译都很顺畅。


其实,采用新的方法移植,总共没费两个小时的工作量。但在前一个方法里几乎耗费了一个星期,汗死。

如果再遇到开源莫名其妙的错误,选用逐个文件解决的方法,也是没办法的办法了。


原创粉丝点击