ワインリンカーエラー:.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>
ie、すべての前に#define INITGUID
を追加し、#include <initguid.h>
これがなぜ機能するのかわかりません。
また、-lole32を追加して、引用されたエラーが解決された後に発生したエラーを修正する必要がありました。
コードがコンパイルされます...今、必要なことを実行できるかどうかを確認します。
他のヒント
リンカーは、IID_IShellLinkA
がどこで定義されているかわからないという不満を言っています。ヘッダーに宣言がありますが、おそらくライブラリがありません。 libuuid で定義されていると思うので、リンクコマンドに-luuid
を含めてください。リンカーは、kernel32やuser32など、特定のライブラリセットを自動的に含めるように構成されている可能性がありますが、uuidはそのリストに含まれていない可能性があります。
所属していません StackOverflow