2010-09-09 10 views
5

Uzun zamandır düzeltmeye çalıştığım bir sorunum var.Visual C++ 2010'da bir .lib dosyasına nasıl bağlanır? Projeye başvurmadan mı?

Visual C++ uygulamasında statik bir kütüphane projem var ve başka bir projenin bağlantı kurmasını istiyorum. Şimdiye kadar, kütüphaneyi otomatik olarak bağlayan statik kütüphane projesine bir referans ekledim.

Sadece başlık dosyalarını ve .lib dosyasını kullanarak kütüphaneye bağlanabilmek istiyorum. Ancak, "Çözümlenmemiş bir harici sembol" hatası alıyorum.

Bunu doğru yaptığımı sanıyordum - include dizinini, kitaplık dizinini belirledim ve bağlayıcı giriş özelliklerine girdim ve ek bir bağımlılık olarak lib'i sağladım.

Diğer statik kitaplıklara bu şekilde (SDL gibi) başvurabiliyorum, o zaman benimkini kullanmaya çalıştığımda neden hata alıyorum?

Yardımlarınız için teşekkürler.

Sorun şu ki, gerçek lib dosyasına başvurmuyor mu, yoksa lib'in içinde bir şey mi var?

Hata 2 hata LNK2019: çözülmemiş dış simge "kamu: void __thiscall XEngine :: XCore :: XScreen :: init (:: XCore :: xgame & sınıf XEngine)" Bunlar olsun hata mesajlarıdır (? init @ XScreen @ XCore @ XEngine @@ QAEXAAVXGame @ 23 @@ Z) işlevinde başvurulan "void __cdecl XEngine :: XEngineInit (sınıf XEngine :: XCore :: XScreen &, sınıf XEngine :: XCore :: XGame &)" (? XEngineInit @ XEngine @@ YAXAAVXScreen @ XCore @ 1 @ AAVXGame) 31 @@ Z @ C: \ Users

hata 3 hata LNK2019 Xander Masotto \ Belgeler \ Projeler \ pong \ pong \ source.obj Pong Visual Studio 2010 \ \ : çözümlenmemiş harici sembol "public: __thiscall XEngine :: XCore :: XScreen :: ~ XScreen (void)" (?? 1XScreen @ XCore @ XEngi ne @@ QAE @ XZ) işlevinde başvurulan "void __cdecl XEngine :: XEngineInit (sınıf XEngine :: XCore :: XGame &)" (? XEngineInit @ XEngine @@ YAXAAVXGame @ XCore @ 1 @ @ Z) C: \ Users \ Xander Masotto \ Documents \ Visual Studio 2010 \ Projects \ Pong \ Pong \ source.obj Pong

Hata 4 hata LNK2019: çözümlenmemiş harici sembol "public: __thiscall XEngine :: XCore :: XScreen :: XScreen (void)" (0xScreen @ XCore @ XEngine @@ QAE @ XZ) "void __cdecl XEngine :: XEngineInit (sınıf XEngine :: XCore :: XGame &)" (? XEngineInit @ XEngine @@ YAXAAVXGame @ XCore @ 1 @@ Z) işlevinde başvurulan) C: \ Users \ Xander Masotto \ Documents \ Visual Studio 2010 \ Projects \ Pong \ Pong \ source.obj Pong

+0

Bu çalışması gerekir: C++/Preprocessor/PreprocessorDefinitions ) TESTLIB_API kullanın i maruz istediğiniz her fonksiyon, sınıf veya değişkeni tanımlar. Lütfen hataların (ilgili ve özlü) örneklemesini veriniz? –

cevap

4

Kitaplığınızdaki işlevleri, sınıfları ve değişkenleri dışa aktardığınızdan emin olun. Sizde başka uygulamalara (yani, senin dll veya exe). Varsayılan olarak maruz kalmazlar.

Bunu yapmak için temel çalışma, genellikle kitaplığınız için proje oluşturduğunuzda ortaya çıkar.)

1 Ben bir önişlemci olarak tanımlanan TESTLIB_EXPORTS olduğundan emin olun: kod ile

#ifdef TESTLIB_EXPORTS 
#define TESTLIB_API __declspec(dllexport) 
#else 
#define TESTLIB_API __declspec(dllimport) 
#endif 

yukarıdaki işlevleri, sınıflar, veya değişkenler ortaya çıkarmak için yapmak benim için iki şey daha sadece orada proje oluşturma sırasında oluşturulan .Proje ayarları: açıkladığınız olarak

class TESTLIB_API Order { 
    void doSomething(); 
}; 
+0

Bu gerçekten doğru yol mu? Karşılaşmak için statik bir .lib kurmaya çalışıyor, o zaman neden dllexports'a ihtiyacı var? Bunların sadece bir dll oluşturmak için gerekli olduğu izlenimi altındaydım. – Ben

İlgili konular