在开始前首先解决库的问题-- pthread.h
我所下载的版本是
配置步骤为:
a、将\pthreads-w32-2-9-1-release\Pre-built.2\lib\x64下的所有文件(pthreadVC2.lib和libpthreadGC2.a)复制到VS2010安装目录下Microsoft Visual Studio 10.0\VC\Lib中
b、将\pthreads-w32-2-9-1-release\Pre-built.2\include\pthread.h复制到Microsoft Visual Studio 10.0\VC\include下
c、将\pthreads-w32-2-9-1-release\Pre-built.2\dll\x64的所有文件(pthreadGC2.dll和pthreadVC2.dll)复制到Microsoft Visual Studio 10.0\VC\Bin下
然后开始创建工程:
1、新建一个空的工程:新建一个visualC++下的空项目
2、添加文件
a)在工程目录下新建文件夹src,拷贝RTKLIB2.4.3下的src下面的所有文件和rcv文件夹到src下面,同时将app\str2str下面的str2str.c拷贝到src下面,作为主程序入口
b)分别添加头文件和源文件到工程中
3、设置项目属性
选择:项目 > 属性。
设置一:配置属性 >链接器 > 调试 >生成调试信息:是
设置二:配置属性 > C/C++ > 常规 > 调试信息格式:C7
编译一下,发现一堆问题,下面一一解决。
1、错误77error C1083: 无法打开包括文件:“rtklib.h”: No such file or directoryd
解决思路这是因为没有将rtklib.h头文件的目录包含在项目里的缘故。
将以下路径加入到include目录下(在项目上右键->配置属性->VC++目录->包含目录Include Path选择rtklib.h所在的目录(src)即可)。
2、错误15error C1083: 无法打开包括文件:“sys/time.h”: No such file or directory sys/time.h
解决思路这是linux下面的gcc里面的库函数,不能在VS中使用;RTKLIB中有大量的这样的库,所以我们要设置预处理WIN32
配置属性 > C/C++预处理器 > 预处理定义:WIN32、_CRT_SECURE_NO_DEPRECATE
3、错误1error C2065: “SIGPIPE”: 未声明的标识符
解决思路找到且定义的位置将其注销掉
4、错误1error C2466: 不能分配常量大小为 0 的数组
解决思路在预编译器里面加入 ENAGLO
5、错误31error LNK2019:无法解析的外部符号 __imp__accept@12,该符号在函数 _accept_nb 中被引用
解决思路添加附加库[连接器->输入->附加依赖库]添加winmm.lib, ws2_32.lib
6、错误13error LNK2019: 无法解析的外部符号 _showmsg,该符号在函数 _convrnx 中被引用
解决思路一查showmsg这个函数如果在DLL中需要自己定义,rtklib里面已经做好了处理需要在预处理器里面加入DLL即可
最终预处理器定义内包含:
7、无法将参数 1 从“char [1024]”转换为“LPCWSTR”
选择"项目->属性->配置属性->常规->字符集->未设置",将UNICODE关闭就可以了···
8、无法解析的外部符号 __imp__timeGetTime@0
没有加入相应的链接库,添加#pragma comment(lib, "winmm.lib")和#pragma comment(lib, "ws2_32.lib")应该就可以了。
完全按照上述步骤,最后出现了如下新的问题:
不知道是不是rtklib又更新了的缘故,还是什么头文件没有添加???
经思考应该是str2str.c这个文件的问题,因此尝试将此文件移除,并借鉴http://blog.sina.com.cn/s/blog_71d6b76b0102xcg9.html#cmt_5B06A265-79C20602-1854ED4FB-9B2-8C5
这篇文章的说明,将rnx2rtkp.c这个文件添加到项目的源文件中),并将rnx2rtkp.c改名为main.c。(之所以选择这个c文件,是因为rnx2rtkp是rtkpost的CUI版本,主要功能是事后处理,今后调用rtklib中的函数时可以将main函数中原有内容注释掉,另写其他函数。如可简单写个坐标转换的功能,调用了添加进来的c文件中的函数,结果运行成功
double BLH[3] = {45.0*D2R, 123.0*D2R ,900.0 };
double XYZ[3] = {0.0, 0.0, 0.0};
pos2ecef(BLH, XYZ);
printf(" X=%f\n Y=%f\n Z=%f\n",XYZ[0],XYZ[1],XYZ[2]);
getch();
http://blog.sciencenet.cn/home.php?mod=space&uid=858128&do=blog&id=990823
http://blog.sina.com.cn/s/blog_71d6b76b0102xcg9.html#cmt_5B06A265-79C20602-1854ED4FB-9B2-8C5
这两篇文章大致相同,较为完整的整合了rtklib编译过程中可能会遇到的所有问题,并且所创建项目也是VC++的空项目,可以作为参考进行借鉴。
转载本文请联系原作者获取授权,同时请注明本文来自尚正辉科学网博客。
链接地址:https://wap.sciencenet.cn/blog-3386358-1138020.html?mobile=1
收藏