程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> VS2013使用rtklib中需要注意的一些問題(編譯),vs2013rtklib

VS2013使用rtklib中需要注意的一些問題(編譯),vs2013rtklib

編輯:關於C語言

VS2013使用rtklib中需要注意的一些問題(編譯),vs2013rtklib


最近因為項目需要需要對rtcm數據進行解碼,rtklib提供了很多底層的函數,准備直接輸出標准DLL的方式供C#調用。下面把項目中引用rtklib源碼需要注意的地方記錄下。

1. 首先在vs2013中新建一個win32的dll項目

2. 在項目上添加一個文件夾[rtklibsrc]然後在文件夾上【添加現有項目】把rtklib的源文件加入工程。在rtklibsrc下建立rcv把rcv下面的文件也添加到工程

  image

3. 現在開始編譯工程,你會發現很多錯誤。下面我們一步步來解決錯誤。

   1>  Q: error C1853: “Debug\rtklibHelper.pch”預編譯頭文件來自編譯器的早期版本,或者預編譯頭為 C++ 而在 C 中使用它(或相反)    x:\xxxx\rtklibhelper\rtklibsrc\tle.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\rtklibhelper\rtklibhelper\rtklibsrc\tle.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\rtklibhelper\rtklibsrc\stream.c

      A: 這個錯誤和上面類似,加入[_WINSOCK_DEPRECATED_NO_WARNINGS ]

 

4> Q:接下來是一個這樣的錯誤  error C2466: 不能分配常量大小為 0 的數組    x:\xxxx\rtklibhelper\rtklibsrc\rinex.c

image

    A:這個錯誤我們來看一下, 在[MAXPRNGLO]上面按F12,看他的定義處

        image 這個常量為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] image, 注意是C/C++的常規下面,不是鏈接器的常規頁面。

 

6> Q:  error LNK2005: _input_oem3 已經在 novatel.obj 中定義    x:\xxxx\rtklibhelper\novatel_old.obj    rtklibHelper

      A: 這個錯誤是添加文件的時候添加重復了novatel_old.c不應該添加了,刪除即可

          image 

 

  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

         image

    

  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

 

  image

 

最後rtklibHelper編譯成功了,可以開始編寫具體的功能函數了。

 

 

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

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

diocp|mybean官方論壇: http://delphi.net.cn

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved