SilentStorm的个人博客分享 http://blog.sciencenet.cn/u/SilentStorm

博文

RTKLIB 在OSX系统下Xcode/CLion平台上的编译问题及解决方法

已有 4767 次阅读 2017-9-18 10:13 |个人分类:计算机|系统分类:科研笔记| RTKLIB, XCode, Clion

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倍。之前看到是每秒更新输出,现在是更新每分钟的数据。



https://blog.sciencenet.cn/blog-2958868-1076413.html

上一篇:Shell 命令及编程学习积累
下一篇:windows下dirent.h找不到的问题
收藏 IP: 42.90.128.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-25 09:25

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部