와인 링커 오류 : .lnk를 만들려고합니다
문제
프로그래밍 방식으로 .lnk 파일을 만들려고합니다. 나는 C를 사용하는 것을 선호하지만 C ++는 괜찮습니다 (그리고 모든 MSDN 물건이있는 것).
관련 코드 샘플은 다음과 같습니다.
#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;
}
나는 Wineg ++를 사용하여 다음을 사용하려고 노력하고 있습니다.
wineg++ -mno-cygwin -o t t2.cpp
그리고 다음 오류가 발생합니다.
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
어떤 아이디어?
해결책
솔루션은 포함 섹션을 다음과 같이 변경하는 것 같습니다.
#define INITGUID
#include <windows.h>
#include <shobjidl.h>
#include <shlguid.h>
#include <initguid.h>
즉, 추가 #define INITGUID
모든 전에 그리고 포함 #include <initguid.h>
왜 이것이 작동하는지 모르겠습니다.
또한 인용 된 사람이 해결 된 후 발생한 오류를 수정하기 위해 -lole32를 추가해야했습니다.
코드가 컴파일됩니다 ... 이제 필요한 것을 할 수 있는지 확인합니다.
다른 팁
링커는 어디에 있는지 알지 못한다고 불평합니다 IID_IShellLinkA
정의됩니다. 헤더에 선언이 있지만 도서관이 없을 것입니다. 나는 그것이 정의되었다고 생각합니다 libuuid, 링크 명령에 포함 시키십시오 -luuid
. 링커는 아마도 Kernel32 및 User32를 포함하여 특정 라이브러리 세트를 자동으로 포함하도록 구성되어 있지만 UUID는 해당 목록에 있지 않을 수 있습니다.
제휴하지 않습니다 StackOverflow