2015-09-06 10 views
41

Bir araştırma projesi için, bir bilimsel hesaplama diline C++ eklentisi yazıyorum. Maalesef, kullanıcıların bunu yapmasına izin veren kütüphane çok güncel tutulmuyor.C++: Visual Studio 2015'te çözülmeyen harici sembol _sprintf ve _sscanf

Projeyi, iyi oluşturulduğu XCode'da başlattım.

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

Denenen düzeltme eklemek oldu: Daha sonra bir PC'ye taşımak zorunda kaldı, bu yüzden, ben bu hatalar nedeniyle oluşturmak mümkün olmamıştır bunu beri Visual Studio 2015 kod göç Başlık #define _CRT_SECURE_NO_WARNINGS. Ancak, bu a) hiçbir hata düzeltildi ve b) C4005 : '_CRT_SECURE_NO_WARNINGS': macro redefinition numaralı uyarıyı ekledi. Bu sorunu önceden tahmin eden kütüphaneyi zaten kabul ediyorum. Ne olursa olsun, sorunu çözmedi.

Nasıl devam etmeliyim?

cevap

112

bağlayıcı giriş dosyalarına aşağıdaki kütüphane ekleyin:

legacy_stdio_definitions.lib 

VS 2015 şimdi stdio.h fonksiyonların çoğu için iç işlevleri çağırmak satır içi tanımlarını kullanır. Bir nesne dosyası (veya kitaplık üyesi) bu işlevlerden birine bağlıysa, legacy_stdio_definitions.lib, bağlanabilecek işlevin harici olarak bağlanabilen bir sürümünü sağlar.

Diğer seçeneğiniz, bu işlevlere bağlı olan birimi VS 2015 ile yeniden derlemektir (muhtemelen tercih edilen seçenek budur).

+0

Bunu yaptıklarında kahretsin. – user4581301

+0

@ user4581301: ayrıntılı olabilir misiniz? –

+1

Üzgünüm. Bir sarıcı ile bile, eski stdio şeyler ağlama ve inleme olmadan bile destekliyor. Her şimdi ve sonra snprintf tam olarak iş için doğru bir araçtır ve ben sadece kutuya gelmesi gereken bir şey için taşınabilirlik sarmalayıcıları yapmaktan nefret ediyorum. – user4581301

0

Bu hata, sürüm 5 max sdk (pure c api) sürümüne karşı maksimum bisiklet eklentileri derledim. Eski kütüphane düzeltmesi benim için işe yaramadı (sahip olmalıydı, ve merak ettiğim halde neden olmasın diye bir fikriniz varsa), ancak stdio yüklenmeden önce _NO_CRT_STDIO_INLINE tanımladım ve bu da hile yaptı.

İlgili konular