|||
RTKLIB是卫星导航常用的开源软件,由日本学者Takasu开发并开源(致敬!)。在Windows平台下,可以使用Radstudio,visualstudio等开发工具编译,在linux下可以使用gcc编译,在mac平台下,虽然也有gcc,但是是改版的clang,编译过程中会出现一些问题。本文将就出现的问题进行探讨。
1. 在macOS (Xcode, Clion, gcc, or whatever)中编译 rnx2rtkp ,显示 “can't find -lrt library".
删除-lrt选项即可,In clang(mac), runtime lib is not explicitly needed, while in Linux it is needed。
2.After successful complilation, run rnx2rtkp, it will show an error: Segmental fault 11. The solution is to change in the first line of rtkcmn.c as follows: change "#define _POSIX_C_SOURCE 199309" to "#define _POSIX_C_SOURCE 199506"
3.RTKLIB在Clion或Xcode中编译完之后,进行调试时,单步执行,运行位置乱跳。这是由于在编译选项中加入了优化的指令 -O3, 调试的时候将这个选项去掉即可。编译release版本的时候再用-O3
4.RTKLIB怎么在Xcode中编译:
很简单,先建立工程,将rtklib中app的h文件和c文件添加进工程中,包括src/rcv/中的c文件。以rnx2rtkp工程为例,需要添加到工程中的文件为rtklib/app/rnx2rtkp/rnx2rtkp.c, src/ 下的所有c文件,h文件,src/rcv/中的所有h,c文件。
然后将rnx2rtkp文件夹下面的makefile打开,将其中的预编译宏选项 -DTRACE -DENAGLO -DENAQZS -DENAGAL -DNFREQ=3 (还有-DENACMP,打开北斗的情况,rnx2rtkp中默认是不打开的)都搞到xcode的工程配置中去。具体方法如下:
单击或双击工程名:
对比rnx2rtkp提供的makefile(图见文末),在xcode显示的页面中修改如下属性:
1. C Language Dialect 中改成ANSI C
2.将预编译宏写进去
需要修改的属性在这里
点开之后,点击左下角的➕,一个一个把下图中的内容添加进去
3.到这一步之后,就可以编译成功了。但是在debug的时候会发生单步执行乱跳的情况,原因是使用了编译优化 -O3,所以还要将编译优化等级设置为0:
4.到此为止,可以进行编译和debug了。但是编译时还会冒出很多无关的warnings,可以设置下面的属性(可以根据自己的需求设置),去除一些warnings:
5.附图:rnx2rtkp提供的makefile,OPTS里面是预编译宏命令,CFLAG中是关于warnings,优化等级,C dialect的;LDLIBS中是动态链接库:-lm是数学库,-lrt 实时运行库。在mac中,不需要使用-lm 和-lrt这两个命令,因为默认已经链接上了。
6. 使用lapack和cblas库来提高矩阵运算速度。
在linux或者windows上,我们选择矩阵加速库一般是mkl或者一些lapack开源库等。Apple自己开发了lapack和cblas库,在它的accelerate.framework中。它的lapack和cblas库名字叫做libclapack.tbd、libcblas.tbd,其路径都已经包含在系统环境变量里面了。我们在使用的时候直接引用就行了,不用像在linux中先编译lapack库,还要安装gfortran环境。在mac中,rnx2rtkp的makefile中修改如下两行即可:
CFLAGS = -Wall -O3 -ansi -pedantic -Wno-unused-variable -I\$(SRC) -DLAPACK \$(OPTS)
LDLIBS = -lm -llapack -lblas
使用了lapack之后,rnx2rtkp的速度大概提高了60倍。之前看到是每秒更新输出,现在是更新每分钟的数据。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-28 23:41
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社