最近由于项目须要须要对rtcm数据进行解码,rtklib提供了不少底层的函数,准备直接输出标准DLL的方式供C#调用。下面把项目中引用rtklib源码须要注意的地方记录下。数组
1. 首先在vs2013中新建一个win32的dll项目,将rtk源码放到工程路径下(注意不是工程组所在路径),命名为rtklibsrcide
2. 在项目上添加一个文件夹[rtklibsrc]而后在文件夹上【添加现有项目】把rtklib的源文件(rtklibsrc下文件)加入工程。在rtklibsrc下创建rcv把(rtklibsrc\rcv)下面的文件也添加到工程函数
3. 如今开始编译工程,你会发现不少错误。下面咱们一步步来解决错误。post
1> Q: error C1853: “Debug\rtklibHelper.pch”预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反) x:\xxxx\rtklibhelper\rtklibsrc\tle.c 1 1 rtklibHelper
A: 不使用预编译头网站
2> Q: 错误 1 error C4996: 'strncpy': This function or variable may be unsafe. Consider using strncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. x:\xxxx\rtklibhelper\rtklibhelper\rtklibsrc\tle.c spa
A: 其实提示上面已经告诉你方法了,须要你加入预编译指令来取消这个错误[_CRT_SECURE_NO_WARNINGS].net
3> Q: error C4996: 'gethostbyname': Use getaddrinfo() or GetAddrInfoW() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings x:\xxxx\rtklibhelper\rtklibsrc\stream.c blog
A: 这个错误和上面相似,加入[_WINSOCK_DEPRECATED_NO_WARNINGS ]get
4> Q:接下来是一个这样的错误 error C2466: 不能分配常量大小为 0 的数组 x:\xxxx\rtklibhelper\rtklibsrc\rinex.c input
A:这个错误咱们来看一下, 在[MAXPRNGLO]上面按F12,看他的定义处
这个常量为0,那么不能进行编译,咱们想上面同样在预编译器里面加入 ENAGLO
5> Q: error C1083: 没法打开包括文件: “rtklib.h”: No such file or directory x:\xxxx\rtklibhelper\rtklibsrc\rcv\ublox.c 41 1 rtklibHelper
A: 添加附加目录设置[.\rtklibsrc] , 注意是C/C++的常规下面,不是连接器的常规页面。
6> Q: error LNK2005: _input_oem3 已经在 novatel.obj 中定义 x:\xxxx\rtklibhelper\novatel_old.obj rtklibHelper
A: 这个错误是添加文件的时候添加剧复了novatel_old.c不该该添加了,删除便可
7>: Q: error LNK2019: 没法解析的外部符号 _settspan,该符号在函数 _postpos 中被引用 x:\xxxx\rtklibhelper\postpos.obj rtklibHelper
error LNK2019: 没法解析的外部符号 __imp__timeGetTime@0,该符号在函数 _tickget 中被引用 x:\xxxx\rtklibhelper\rtkcmn.obj rtklibHelper
error LNK2019: 没法解析的外部符号 __imp__accept@12,该符号在函数 _accept_nb 中被引用 x:\xxxx\rtklibhelper\stream.obj rtklibHelper
A: 添加附加库[链接器->输入->附加依赖库]添加winmm.lib, ws2_32.lib
8>:Q: error LNK2019: 没法解析的外部符号 _showmsg,该符号在函数 _convrnx 中被引用 x:\xxxx\rtklibhelper\convrnx.obj rtklibHelper
A: 一查showmsg这个函数若是在DLL中须要本身定义,rtklib里面已经作好了处理须要在预处理器里面加入[DLL]便可。
预处理器里面咱们添加了
_CRT_SECURE_NO_WARNINGS
_WINSOCK_DEPRECATED_NO_WARNINGS
ENAGLO
DLL
最后rtklibHelper编译成功了,能够开始编写具体的功能函数了。
=========================================================================================
diocp|mybean官方网站: 主域名: www.diocp.org
diocp|mybean官方论坛: http://delphi.net.cn