2015-09-06 1377 views
41

對於一個研究項目,我正在爲科學計算語言編寫一個C++附加組件。不幸的是,允許用戶做到這一點的圖書館並沒有很好地保持最新。C++:Visual Studio 2015中無法解析的外部符號_sprintf和_sscanf

我在XCode中開始了項目,它的構建很好。後來,我不得不搬到電腦,所以我遷移代碼到Visual Studio 2015年因爲這樣做,我一直沒能建立由於以下錯誤:

LNK2001 : unresolved external symbol _sprintf 
LNK2019 : unresolved external symbol _sscanf referenced in function _GetDDouble 
LNK2019 : unresolved external symbol _sprintf referenced in function _CheckRunningInMainThread 

嘗試的修復是增加標題#define _CRT_SECURE_NO_WARNINGS。但是,這a)修正了沒有錯誤和b)添加了警告C4005 : '_CRT_SECURE_NO_WARNINGS': macro redefinition。我假設圖書館已經定義了這個宏,預測了這個問題。無論如何,它並沒有解決問題。

我該如何繼續?

回答

112

以下庫添加到鏈接器輸入文件:

legacy_stdio_definitions.lib 

VS 2015年現在使用調用內部功能對於很多的stdio.h內聯函數的定義。如果一個目標文件(或庫成員)依賴於其中一個函數,那麼legacy_stdio_definitions.lib提供了一個可鏈接到的函數的外部可鏈接版本。

你的另一種選擇是用VS 2015重新編譯依賴這些函數的單元(這可能是首選)。

+0

關於該死的時間他們做到了。 – user4581301

+0

@ user4581301:你能詳細說明一下嗎? –

+1

對不起。即使用包裝紙也支持舊的史迪奧無需嘮叨和呻吟。現在,snprintf正是這項工作的正確工具,而且我討厭必須爲盒子中的東西做可移植包裝。 – user4581301

0

我得到這個錯誤編譯循環最大插件對版本5 max sdk(純c api)。傳統的庫修復程序對我來說不起作用(它應該有,如果有人有任何想法,爲什麼它可能不會好奇),但是我在定義了stdio之前定義了_NO_CRT_STDIO_INLINE,並且確實有效。

相關問題