zoukankan      html  css  js  c++  java
  • VS2013使用rtklib中需要注意的一些问题(编译)

    最近因为项目需要需要对rtcm数据进行解码,rtklib提供了很多底层的函数,准备直接输出标准DLL的方式供C#调用。下面把项目中引用rtklib源码需要注意的地方记录下。

    1. 首先在vs2013中新建一个win32的dll项目,将rtk源码放到工程路径下(注意不是工程组所在路径),命名为rtklibsrc

    2. 在项目上添加一个文件夹[rtklibsrc]然后在文件夹上【添加现有项目】把rtklib的源文件(rtklibsrc下文件)加入工程。在rtklibsrc下建立rcv把(rtklibsrc cv)下面的文件也添加到工程

      image

    3. 现在开始编译工程,你会发现很多错误。下面我们一步步来解决错误。

       1>  Q: error C1853: “Debug tklibHelper.pch”预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)    x:xxxx tklibhelper tklibsrc le.c    1    1    rtklibHelper
              A: 不使用预编译头image

             

      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 tklibhelper tklibhelper tklibsrc le.c

            A: 其实提示上面已经告诉你方法了,需要你加入预编译指令来取消这个错误[_CRT_SECURE_NO_WARNINGS]

             image

    3> Q:  error C4996: 'gethostbyname': Use getaddrinfo() or GetAddrInfoW() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings    x:xxxx tklibhelper tklibsrcstream.c

          A: 这个错误和上面类似,加入[_WINSOCK_DEPRECATED_NO_WARNINGS ]

    4> Q:接下来是一个这样的错误  error C2466: 不能分配常量大小为 0 的数组    x:xxxx tklibhelper tklibsrc inex.c

    image

        A:这个错误我们来看一下, 在[MAXPRNGLO]上面按F12,看他的定义处

            image 这个常量为0,那么不能进行编译,我们想上面一样在预编译器里面加入 ENAGLO

    5> Q:  error C1083: 无法打开包括文件: “rtklib.h”: No such file or directory    x:xxxx tklibhelper tklibsrc cvublox.c    41    1    rtklibHelper

          A:  添加附加目录设置[. tklibsrc] image, 注意是C/C++的常规下面,不是链接器的常规页面。

    6> Q:  error LNK2005: _input_oem3 已经在 novatel.obj 中定义    x:xxxx tklibhelper ovatel_old.obj    rtklibHelper

          A: 这个错误是添加文件的时候添加重复了novatel_old.c不应该添加了,删除即可

              image 

      7>:  Q:  error LNK2019: 无法解析的外部符号 _settspan,该符号在函数 _postpos 中被引用    x:xxxx tklibhelperpostpos.obj    rtklibHelper

                    error LNK2019: 无法解析的外部符号 __imp__timeGetTime@0,该符号在函数 _tickget 中被引用   x:xxxx tklibhelper tkcmn.obj    rtklibHelper

                    error LNK2019: 无法解析的外部符号 __imp__accept@12,该符号在函数 _accept_nb 中被引用    x:xxxx tklibhelperstream.obj    rtklibHelper

            A: 添加附加库[连接器->输入->附加依赖库]添加winmm.lib, ws2_32.lib

             image

        

      8>:Q: error LNK2019: 无法解析的外部符号 _showmsg,该符号在函数 _convrnx 中被引用    x:xxxx tklibhelperconvrnx.obj    rtklibHelper

            A: 一查showmsg这个函数如果在DLL中需要自己定义,rtklib里面已经做好了处理需要在预处理器里面加入[DLL]即可。

    预处理器里面我们添加了

    _CRT_SECURE_NO_WARNINGS
    _WINSOCK_DEPRECATED_NO_WARNINGS
    ENAGLO
    DLL

      image

    最后rtklibHelper编译成功了,可以开始编写具体的功能函数了。

    =========================================================================================

    diocp|mybean官方网站: 主域名: www.diocp.org

    diocp|mybean官方论坛: http://delphi.net.cn

  • 相关阅读:
    IBatisNet不常用到的配置(Dao.config ConnectionTimeout),居然不起作用(前辈留给我们的坑)
    随机数 字母 数字
    证书文件(pfx)读取时报 “指定的网络密码不正确”
    SQL多结果集导出Excel
    Uva514
    PAT乙级1012
    栈-41
    位运算-89
    PAT乙级1028
    PAT乙级1029
  • 原文地址:https://www.cnblogs.com/DKSoft/p/4677381.html
Copyright © 2011-2022 走看看