Windows环境下的RTKPlot_Qt版本编译时遇到的问题和解决方法

在使用了 RTKLIB开源包自带的 rtkplot.exe后,知道了它所具有的功能,就想着如何模仿它做出一个 demo。一开始看的是之前下载的 2.4.2版本的 RTKLIB,里面是使用 Delphi开发的。由于我现在对 Qt比较熟悉,所以想着使用 Qt框架来开发这个 demo。在看源码的过程中,阴差阳错之间又去官网上重新下载了一次源码包,结果发现最新的 2.4.3版本里面就带有相关 App程序的 Qt实现。这样的话,就可以直接阅读现成的 Qt源码了。不过首先需要解决的问题是,要尝试将所给的源代码编译成功。

1.直接在 Qt creator中打开 rtkplot_qt.pro文件,配置项目属性,进入正常的工作界面。直接进行调试,则会报出如下错误。

图 1

一开始以为是 VS2015在安装时出了问题,网上找的解决方案也都是说配置环境变量。其实不然,上图中已经说明是什么问题了,是 src\debug目录下缺失 libRTKLib.a文件。

2. .a文件是 Linux系统下的静态库文件,类似于 Windows系统下的 .lib文件;同样的,Linux系统下的 .so文件是动态链接库文件,相当于 Windos系统下的 .dll文件。另外,之前在阅读 rtkplot_qt的源码时就发现,其实里面很多数据和算法的代码都是使用 src下的相应代码,所以这些可视化程序是需要调用 src库中的代码的。而调用方式就是通过将 src中的源码编译成静态链接库,供这些可视化程序使用。这一点在 rtkplot_qt.pro文件中是有所体现的,如下图所示。

图 2

3.既然知道了问题是 src\debug目录下缺失 libRTKLib.a文件,那就想办法去找到 libRTKLib.a文件并放置到该目录下即可。打开文件夹,发现 src目录下根本就没有 debug文件夹,所以我们就先新建一个 debug文件夹。接着在整个 RTKLIB源码包中搜索 libRTKLib.a文件,结果是都没有找到。既然没有现成的,那就可能需要我们自己制作一个 libRTKLib.a文件了。

4.前面说了,libRTKLib.a文件就是将 src源码编译成的静态链接库文件,而 src文件夹下正好有一个 src.pro文件。打开该文件,发现如下图所示代码

图 3

上图中的代码就是说本次 Qt项目的目的是生成一个名为 RTKLib的静态链接库文件。不过需要注意的是,windows系统下生成的是 .lib文件!直接调试该项目,报出如下错误

图 4

再查看如下图所示的编译信息后,发现问题应该是编译参数“-Wno-unused-but-set-variable” 无效导致的。百度之后,该编译参数的原意是为了忽略掉那些设置了而没有使用到的参数,但是如下图所示的写法似乎有问题,应该改成图 7所示的写法。

图 5 编译参数“-Wno-unused-but-set-variable” 所导致的的错误

图 6 编译参数“-Wno-unused-but-set-variable” 原本的书写方式

图 7 编译参数“-Wno-unused-but-set-variable” 修改之后正确的书写方式

5.清除原项目后执行 qmake,再重新调试一次,即可成功运行,弹出如下所示的对话框。

图 8

一开始我也很懵逼,咋会弹出这个界面。我知道这个界面就是相当于 C++控制台程序可以通过命令行给主函数 main传递参数,但是 src文件夹下根本就没有 main函数,里面都是函数的源码,并没有调用这些源码的函数。百度之后发现,这是因为该项目本身就是为了编译静态库文件,项目中没有可执行的主函数,所以才会弹出这个界面来选择可执行程序并输入参数。至于所需要的静态链接库文件 libRTKLib.lib,已经生成在了build-src-Desktop_Qt_5_8_0_MSVC2015_64bit-Debug\debug目录下。将该文件拷贝到 src\debug目录下,在重新编译 rtkplot_qt项目之前,需要将图 2中的代码改成下图所示。这是因为现在生成的静态库是 .lib文件,而源码的环境可能是 Linux系统,所以用的是 .a文件。需要对代码稍作修改。

图 9

清除后执行 qmake,再重新调试,又会报出如下错误

图 10

6.对于前两个错误,直接在 plotcmn.cpp文件中使用该函数报错的地方,再添加第三个参数 ndec就可以了。而第三个错误,则要将字符串指针数组 name重新定义成 常量字符串指针数组(const char*)。修改之后再次编译,又会报出如下错误。

图 11

这个问题初看很奇怪,因为报“无法解析的外部符号”一般都是链接库出了问题,而我们之前已经添加了链接库文件 libRTKLib.lib。一开始我不知道要自己编译  libRTKLib.lib文件时,曾经把图 2中的代码直接注释掉,想试一下程序能不能运行,结果报了一大堆“无法解析的外部符号”的问题。而现在在添加了链接库之后还报了这个问题,不过只报了这两个“无法解析的外部符号”。难道是  libRTKLib.lib里的确没有包含 input_tersus和 input_tersusf这两个函数?查找之后发现这两个函数是在 src/rcv/tersus.c文件中的,打开 src.pro文件,发现其 SOURCES中真的还就只缺失了 tersus.c这个文件。在 SOURCES中添加完该文件后,重新编译 src项目的静态库文件。再将第二次得到的 libRTKLib.lib替换掉 src/debug目录下的相应文件。

7.重新运行 rtkplot_qt项目,就可以成功运行啦。运行结果如下图所示

图 12 rtkplot_qt成功运行后的主界面

Bingo!

原文地址:https://www.cnblogs.com/taqikema/p/9219917.html

时间: 2024-10-11 17:42:25

Windows环境下的RTKPlot_Qt版本编译时遇到的问题和解决方法的相关文章

Windows环境下使用cygwin ndk_r9c编译FFmpeg

 一.废话 最近学习,第一步就是编译.我们需要编译FFmpag,x264,fdk_aac,一步步来.先来讲一下FFmpeg,网上说的很多都是几百年前的,我亲测完美可用 联系我可以直接评论,也可以加我QQ:11635423  二.干货  我能力有限,但是我希望我写的东西能够让更多的人能够接受.我也是刚刚接触.做一个记录,也希望能够对其他人有好处. 几个概念理解一下:不理解也没关系.用了之后再说慢慢就理解了.主要是因为我们是windows 先是cygwin下的一些概念:        unix st

Windows环境下使用cygwin ndk_r9c编译x264

 一.废话 最近学习,第一步就是编译.我们需要编译FFmpag,x264,fdk_aac,下面是x264,网上说的很多都是几百年前的,我亲测完美可用 还是那句话 我能力有限,但是我希望我写的东西能够让更多的人能够接受.我也是刚刚接触.做一个记录,也希望能够对其他人有好处.联系我可以直接评论,也可以加我QQ:11635423  二.干货  准备:1.x264的源码 2.cygwin下载,安装,这个网上基本都有.我不讲太多.git cygdrive bash make 这几个都需要下载 3.ndk我

Windows环境下使用Cmake ndk编译fdk-aac

 一.废话 最近学习,第一步就是编译.我们需要编译FFmpag,x264,fdk_aac,下面是x264,网上说的很多都是几百年前的,我亲测完美可用 还是那句话 我能力有限,但是我希望我写的东西能够让更多的人能够接受.我也是刚刚接触.做一个记录,也希望能够对其他人有好处.联系我可以直接评论,也可以加我QQ:11635423  二.干货  准备:1.fdk_aac的源码  git clone https://android.googlesource.com/platform/external/aa

关于Windows_8.1/Windows 7下普通用户运行软件提示需要输入管理员密码解决方法

关于Windows_8.1/Windows 7下普通用户运行软件提示需要输入管理员密码解决方法 1. 问题起因 最近遇到一个比较棘手问题,顺丰速运修改了快递单填写方式,必须要安装他们公司开发的一个软件(软件名叫"速打线下用户专用版"),这个软件非常奇葩,只要是普通用户运行该软件,就弹出"用户控制"的对话框要求输入管理员密码,要么就把用户账户加入管理员组才能正常运行,作为一家比较有规模的企业,怎么可能随便开放管理员权限啊!这样做将会有无尽麻烦(如果你是管理员,你懂的)

Linux下MySQL的写文件时权限错误(Errcode: 13)解决方法

在数据库中select * into outfile '/home/mysql/data.sql',mysql又提示错误: ERROR 1 (HY000): Can't create/write to file '/home/mysql/data.sql' (Errcode: 13)   权限错误(Errcode: 13)解决方法 1  查看导出目录的权限 是否有mysql用户写的权限 2 如果有多级目录,要确保到处目录的上级目录有可执行权限,如果是/root目录 700要修改705 否则写不进

Win10环境下 HTTP 错误 500.19 - Internal Server Error 问题及其解决方法

记一下今日份小bug... 明天要做软件架构实验了,今天打算测试下运行web项目,于是乎,找出了以前用JSP写的web项目测试运行不了,我再打开浏览器测试Tomcat服务器,在地址栏键入http://localhost:8080/,但是出现了bug,如下图: 图中红圈里的文件我在相应的文件夹里并没有找到,所以很纳闷,搜了下解决方法,说是需要删除那个config的配置文件,但是问题来了,我明明没有啊... 又搜了半天,发现可能和IIS有关...于是又去搞IIS相关的,进入的具体方式是,win10下

Windows环境下python3.7版本怎么安装pygame

访问此网址 下载对应Python版本的pygame,如下图: 下载完成后,会有一个whl后缀的文件. 将此文件复制到Python根目录下的scripts目录下,打开cmd, 切换到scripts目录下,运行命令 pip install <刚刚下载文件的文件名> 等着安装完成就行,如果出现一个错误,提示让你更新pip, You are using pip version 8.1.1, however version 9.0.1 is available.You should consider u

【解决】SOUI向导生成项目(VC2013以上版本编译时)无法运行XP解决

对于SOUI向导生成的项目,无法在XP运行(提示 不是有效的WIN32程序 ) 即便设置为: 也无效,使用eXeScope打开发现最低系统要求是6.0,也就是说最少要WINXP以上,例如WIN7才能运行. 这时打开 链接器选项 找到 系统 发现设置如下: 感到很神奇明明所需对低是5.01啊为什么不能运行呢,但是看红框位置,这里是空的. 查阅国外资料,发现类似情况,应该设置为下图模式: 再次REBUILD编译,该问题解决. 咨询过启程大哥,他表示无奈,这个应该是微软的一个BUG,也就是VS编译器的

在Mac上用bootcamp安装windows,使用Android studio启动模拟器时蓝屏问题的解决方法

原链接 https://medium.com/@andrea.bresolin/windows-10-on-mac-with-boot-camp-making-intel-haxm-work-without-crashing-the-system-39555854f815 大概意思Android studio的模拟器需要intel的haxm服务,但windows on Mac的电源管理和haxm之间有一定问题,所以睡眠后无法正常重启haxm,需要手动重启. 原文地址:https://www.cn