2010-08-14 12 views
5

nVidia CUDA C ile programlama yapıyorum. Visual Studio 2008'i geliştirme ortamım olarak kullanıyorum ve bazı bağlantı sorunlarım var ve birileri bunu düzeltmenin bir yolu olup olmadığını merak ediyorum. ya da aynı sorunu vardı ve bir çözüm sunabilirdi.Visual Studio Linki ile Sorun Bağlantı

Programım 3 dosyadan oluşur. 1 başlık dosyası (stuff.h), 1 C kaynak dosyası (stuff.c) ve 1 CUDA C dosyası (main.cu). (İsimler sahtedir, ancak sadece noktayı göstermek içindir).

Artık stuff.h/stuff.c, main.cu.'nin içinden aradığım yardımcı işlevleri tanımla/uygula.

Visual Studio 2008'i ve nVidia'nın GPU Computing SDK'sından Cuda.rules kullanıyorum ve her şey iyi bir şekilde derleniyor ... ancak tüm dosyaları birbirine bağlamak söz konusu olduğunda başarısız oluyor. Stuff.h dosyasında (ve stuff.c dosyasında uygulanmış) tanımlanan tüm işlevlerin, "çözümlenmemiş harici semboller" olarak işaretlendiklerinden doğru olarak bağlanmadıkları görülmektedir.

Olası nedenler nelerdir ve bunu nasıl düzeltebilirim?

Çok teşekkürler,


Tamam

ExtremeCoder yüzden tüm derleme almak başarmış. Yapmam gereken tek şey şeyleri uygulama dosyasının uzantısı .c'den .cpp'ye değiştirmek oldu (C++ olarak derlerken anlam c derleme yapmaz!).

Buna neden olabilir? Bu gerçekten C kodu olması gerekiyordu gibi oldukça ... (yerine .cpp bir .c olarak

Herhangi işaretçileri herşeyi sakladın?

görüntüleri dönüştürmek için CUDA kullanan bir VS 2005 proje var

cevap

2

(aslında altta yatan CUDA etrafında sarıcı var derleyici ve cl.exe, varsayılan MS derleyicisi). Sonuç olarak, C++ bağlayıcılı işlevler aramaktadır, oysa onları C bağlaçları olarak C olarak derleyerek.

o zaman ya düzenleme stuff.h extern "C" olarak işlevlerini bildirmek için C kodunuzu tutmak istiyorsanız:

/* in stuff.h */ 
if defined(__cplusplus) 
    extern "C" 
    { 
#endif 
/* ... your declarations ... */ 
if defined(__cplusplus) 
    } 
#endif 

Yoksa ana içinde stuff.h dahil sarabilirsiniz .cu:

// in main.cu 
extern "C" 
{ 
#include "stuff.h" 
} 
+0

Yardım için teşekkürler. Çalışıyorum. .cu dosyalarının C dosyaları olarak derlenip C++ dosyaları olarak derlenmesinin bir yolu var mı? Teşekkürler. – ExtremeCoder

+0

'--host-compilation = c' seçeneğini deneyebilir, ancak uyarılarda bu gönderiyi görebilirsiniz: http://forums.nvidia.com/index.php?showtopic=101609. Genel olarak, "ana" işlevimi ve diğer her şeyi standart C/C++ dosyalarında tutmayı ve daha sonra CU dosyalarında yalnızca çekirdek ve sarıcıları bulundurmayı tercih ederim. Thrust şeylerinin çoğunun da CU dosyalarına girmesi gerekiyor ... – Tom

1

onların gri tonlama temsil here. zaten oldukça sağlıyor olmalı yüklediyseniz o. olsa OpenCV kullanır.

Ama OpenCV ve uygulamayı derlemek istemiyorum olmasa bile, VS 2008 dönüştürmek ve bu açabilir CUDA kaynak kodunu C/C++ kodundan nasıl ayıracağınızı ve proje özelliklerini doğru şekilde nasıl yapılandıracağınızı görebileceksiniz.

Ben de bu büyük iplik işaret etmelidir: main.cu dosya varsayılan olarak, bir C++ derleyicisi olan, nvcc tarafından işleniyor

How do I start a new CUDA project in Visual Studio 2008?

+0

Cevabınız için teşekkürler, biraz daha fazla yardımcı oldu ama elde etmeyi umduğum şey için değil. Aslında diğer bazı projelere bir göz attım, biraz karışıklık yaptım ve eğer tüm yaptığım şey, stuff.c'nin uzantısını değiştirmek. Buna ne neden olabilir? Teşekkürler. – ExtremeCoder

+0

İyi! .cpp uzantısını kullanmak sizin için bir sorun mu var? Sorununuzu anlamak için yardıma ihtiyacınız varsa, sorunuzu düzeltmeniz ve VS 2008'in size verdiği hata mesajlarını yapıştırmanız gerekiyor. – karlphillip