2009-03-03 15 views
2

Programatik olarak .lnk dosyasını oluşturmaya çalışıyorum. C'yi kullanmayı tercih ederim, ancak C++ gayet iyi (ve tüm MSDN şeyleri içeride).Wine linker hatası: .lnk oluşturmaya çalışıyor

ilgili kodu bir örnektir:

#include <windows.h> 
#include <shobjidl.h> 
#include <shlguid.h> 

HRESULT CreateLink(LPCSTR lpszPathObj, LPCSTR lpszPathLink, LPCSTR lpszDesc) { 
    HRESULT hres; 
    IShellLink* psl; 

    /* Get a pointer to the IShellLink interface. */ 
    hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, 
          IID_IShellLink, (LPVOID*)&psl); 
    return hres; 
} 

kullanıyorum ++ wineg ile karmaşığa çalışıyorum:

wineg++ -mno-cygwin -o t t2.cpp 

Ve aşağıdaki hataları alıyorum:

 
t2-Tw9YPp.o: In function `CreateLink(char const*, char const*, char const*)': 
t2.cpp:(.text+0x34): undefined reference to `IID_IShellLinkA' 
/usr/bin/ld: t2-Tw9YPp.o: relocation R_386_GOTOFF against undefined hidden symbol `IID_IShellLinkA' can not be used when making a shared object 
/usr/bin/ld: final link failed: Bad value 
collect2: ld returned 1 exit status 
winegcc: i486-linux-gnu-g++ failed 

Herhangi bir fikir?

+0

Sorunuzu bir kısayol dosyası oluşturmaya çalıştığınızı söylüyorsunuz, ancak gösterdiğiniz sorun bir bağlayıcı hatasıdır. Kısayolu nasıl oluşturacağınızı biliyor musunuz, ve sadece programın oluşturulmasında sorun yaşıyorsanız ya da linker problemini çözmenizde hala ne yapacağınızı merak ettiniz mi? –

+0

I * düşünüyorum * MSDN'den bağlantı kurabilmem için ihtiyacım olan şeyin temelini oluşturacak bir örnek kodum var. Muhtemelen soru başlığını değiştirmeliyim, bu * yanılıyor * yanıltıcı – singpolyma

cevap

2

çözüm için bölümü içerir değiştirmek gibi görünüyor.

Ayrıca, alıntı yapılanın çözüldükten sonra ortaya çıkan bir hatayı düzeltmek için -ol.

Kod derler ... şimdi ihtiyacım olanı yapıp yapamayacağımı görmek için.

1

Linker, IID_IShellLinkA'un nerede tanımlandığını bilmediğinden şikayetçidir. Bir başlıkta beyanınız var, ancak muhtemelen bir kütüphaneyi kaçırıyorsunuz. Ben libuuid içinde tanımlanmış olduğunu düşünüyorum, bu nedenle -luuid ile bağlantı komutunuzda bunu içerir. Bağlayıcı, kernel32 ve user32 dahil olmak üzere, belirli bir kütüphane kümesini otomatik olarak içerecek şekilde yapılandırılmış olabilir, ancak uuid sadece bu listede bulunmayabilir. ,

#define INITGUID 
#include <windows.h> 
#include <shobjidl.h> 
#include <shlguid.h> 
#include <initguid.h> 

yani herşeyden önce #define INITGUID ekleyip bu işleri niçin hiçbir fikrim yok #include <initguid.h>

şunlardır:

+0

Ekleme -luuid hata mesajlarını değiştirmiyor. Kitaplığı bulma konusunda hata yapmaz, sadece hata değişmez. – singpolyma

+0

Şarap yok, bu yüzden hangi kitaplığın tanımlandığını kesin olarak söyleyemem. Unix kitaplığı dosyasının elfdump ile neleri içerdiğini görebilirsiniz. Belki de Wine libs için çalışıyor, bu yüzden ihtiyacınız olan dosya için lib klasöründe arama yapabilirsiniz. –

+1

Şarap indirdim. Shell32.dll.so dosyasında "IID_IShellLinkA" dizesini buluyorum. –

İlgili konular