.dll/.libs öğesinin nasıl kullanılacağı konusunda genel bir sorum var. Projem için kullanılacak bir .dll oluşturuyorum, ancak derlemeye başladığımda .lib ile ilişkili .lib ile ilişkili olan .lib dosyasını derlemek için statik olarak bağladığımı fark ettim (aksi halde bağlantı hatası var) hata LNK1107: geçersiz veya bozuk dosya: 0x300 "okuyamıyor"). Bu yüzden daha sonra projemi yeniden tasarladığımda, daha sonra da güncelleyin, sadece yeni bir .dll yerine yeni bir .exe ve yeni bir .dll göndermem gerekecek mi? Bu durumda, neden .dll kullanmanın rahatsız?Lib ve DLL bir exe hatasına bağlanma "0x300'de okunamaz"
cevap
.lib, DLL tarafından dışa aktarılan işlevler vb. Için taslakları içerir. .lib dosyasını EXE'inize bağladınız ve şimdi EXE'iniz işlevleri nasıl çağırılacağını biliyorsunuz. Ama elbette orada bir işlev yok - aramalar hiçbir yere gitmiyor. Yükleme zamanında, işletim sistemi EXE'inizi yüklediğinde, DLL'inizi de yükler ve sonra EXE'i EXE dosyasının bulunduğu yere yükler. Yükleyici, DLL'deki gerçek işleve bir çağrı ile yer değiştirir.
Normalde .lib ürününü müşterilerinize göndermeniz gerekmez. Ancak, müşterileriniz kendi DLL'lerini kullanan kendi EXE'lerini yazmak isterlerse, bunları .lib dosyasını ona karşı bağlayabilmeleri için .lib dosyasını göndermeniz gerekir.
Linker hatası LNK1107, .lib dosyasına değil, DLL'ye bağlanmaya çalıştığınız anlamına gelir. Bu her zaman yanlıştır, çünkü tanım gereği bir DLL, çalışma zamanında statik olarak değil, çalışma zamanında dinamik olarak bağlanır.
- 1. DLL Proje .exp ve .lib dosyasını oluşturmuyor
- 2. .h, .dll ve .lib karışıklık
- 3. Bir .exe ve bir .dll arasındaki paylaşılan yapılandırma
- 4. Visual C++ .exe projem neden oluşturuluyor .lib ve .exp dosyaları?
- 5. lib kullanmadan C içinde DLL kullanın
- 6. EXE veya DLL Görüntü taban adresi
- 7. EXE/DLL dosyalarının SVN düzeltme ve sürüm ressources'i nasıl eşitlenir?
- 8. .exp kullanımı nedir ve .lib ile .dll arasındaki fark nedir?
- 9. Montaj için bir exe veya dll nasıl derlenir
- 10. QTAgent32.exe, yürütme sonrasında bir DLL tanıtıcısını açık tutar
- 11. pyinstaller, bir .exe
- 12. MinGW .exe koddan bağımsız olarak birkaç gcc dll gerektirir?
- 13. .exe hata veriyor MSVCP120.dll Win7x64 için eksik
- 14. py2exe ile exe oluşturmaya çalıştığımda dll bulamıyorum py2exe
- 15. yerli paket exe
- 16. MinGW Link Tek EXE
- 17. C# lib install?
- 18. Bir proje için bir EXE dosyası ekleyin, böylece bir DLL gibi Bin/Debug klasörüne kopyalanacak mı?
- 19. canvas.toDataURL() bir güvenlik hatasına neden
- 20. exe dosyası Ben Qt bir program yazdım
- 21. React- Belirli bir nedenden ötürü 'setState' özelliği okunamaz
- 22. maven-surefire-plugin, DLL dosyaları ve java.library.path
- 23. cmake ile boost.system bağlanma
- 24. Bundle .net exe, dll'ler, .net ortamı ve tekli exe'de yerel dll
- 25. XE2 exe ve dcu konum
- 26. MVC'de bir SelectList'e bağlanma
- 27. .exe nasıl derlenir ve oluşturulur?
- 28. Neden bir proje (exe) aynı çözümdeki başka bir projenin (dll) ad alanını göremiyor?
- 29. Std :: wstring DLL
- 30. DLL 'OraOps12.dll yüklenemedi
Ne önerdiğinizi deneyiyorum. Benim sorunum, hata ayıklama modunda oluşturduğumda lib dosyası oluşturulmamasıdır. Sadece dll dosyası üretildi. Debug sürümünde lib dosyasını nasıl oluşturabilirim. –
Yorumunuz, sürüm oluşturma işleminde bir lib dosyası aldığınızı, ancak hata ayıklama yapısında olmadığınızı gösteriyor gibi görünüyor. Bu doğru mu? Öyleyse, her iki yapılandırmada aynı bağlayıcı seçeneklerini ayarladığınızdan emin olun (yayınlama ve hata ayıklama arasında farklı olması gerekenler dışında elbette.) –
Normalde DLL dosyanız varsa, otomatik olarak içe aktarma kitaplığını oluşturur. __declspec (dllexport) özniteliği ile işlev görür veya işlevleri bir DEF dosyasıyla açıkça dışa aktarırsanız. Belki de sizin __declspec (dllexport) derleyici tarafından hariç tutulur, çünkü #ifndef (_DEBUG) veya bunun gibi bir şeyle çevrelenir? –