2012-11-01 63 views
6

Yani, 3 proje (2 DLL ve 1 .exe) içeren bir C++ çözüm var.DLL Proje .exp ve .lib dosyasını oluşturmuyor

burada temel bağımlılıkları gösterimi var:

Uygulama -> DLL2

Uygulama -> DLL1

DLL2 -> DLL1

Ben sorun olduğunu DLL2 (Bunu oluşturmak) .dll üretiyor ama .lib ve .exp üretmiyor. Uygulama projesinde düzgün bir şekilde DLL2'ye başvurmam gerekiyor. Ancak, DLL1 bu dosyaları üretir ve DLL1'ın ayarlarını DLL2'lerle karşılaştırdım ve farkın ne olduğunu bulamıyorum.

cevap

4

Sorun, DLL2'nin yalnızca .h dosyalarının ve ilişkili .cpp dosyalarından hiçbirinin içeriğinin olmamasıydı. Bu yüzden IDE .lib dosyasını oluşturma nekcesini görmedi.

+0

teşekkürler bu cevap bana yardımcı oldu. Ayrıca 'lib' dosyasının görünmesini sağlamak için en az bir' statik __declspec (dllexport) yöntemi eklemem gerekiyor – javapowered

9

Bunun basit açıklaması, sadece herhangi bir şeyi dışa aktarmayı unutmanızdır. Hiçbir ihracat yoksa bağlayıcı, bir .lib/.exp dosyası oluşturmaz. DLL'de dumpbin.exe /exports çalıştırarak bunu doğrulayabilirsiniz. Hiçbir şey görmediğiniz beklentisiyle. Sembolleri sembolden dışa aktarmak için __declspec(dllexport) kullanın. Ya da bir .def dosyası.

+0

Ve her zamanki dışa aktarma makrosunu tanımlayan başlıkları eklemeyi unutmayın. :) –

0

Ben de aynı şeyin olmasına sebep olacak başka bir yol keşfettim. Geliştirdiğim ve başka bir DLL'de hizmet rutinleri olarak test ettiğim bazı rutinleri kendi DLL'lerine taşıdım. İlk kod satırını yazmadan önce bu hareket planlandığından, ihracat için işaretlenmemişlerdi ve dolayısıyla bu projenin varsayılan çağrı kuralını kullanmışlardı, __cdecl. Kitaplığı oluşturduğumda, yapı ortamı bir .LIB dosyası oluşturmadı. Bazı araştırmalardan sonra ve bu konudaki __declspec (dllimport) 'den bahsetmeden esinlendim, beyanları Yeni Proje Sihirbazı tarafından oluşturulan şablon başlık dosyasında taşıdığım halde, oluşturulan çağrı kuralının adını eklemeyi unuttuğumu fark ettim. prototiplerin içine makro.

Belirtilen çağrı kuralı hem başlığında hem de uygulamaları barındıran CPP dosyalarında beklenen .LIB dosyasını aldım.

İlgili konular