Wine链接器错误:尝试创建.lnk

时间:2009-03-03 22:31:15

标签: c++ c windows wine 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

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

解决方案似乎是将包含部分更改为:

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

即,在所有内容之前添加#define INITGUID并包含#include <initguid.h>

我不知道为什么会这样。

我还必须添加-lole32来修复引用的问题解决后出现的错误。

代码编译......现在看看我能否做到我需要的东西。

答案 1 :(得分:1)

链接器抱怨说它不知道IID_IShellLinkA的定义位置。你在标题中有声明,但你可能错过了一个库。我认为它是在 libuuid 中定义的,所以在你的链接命令中包含-luuid。链接器可能被配置为自动包含一组特定的库,包括kernel32和user32,但是uuid可能不在该列表中。