Linuxのウィンドウ用にC++プログラムをコンパイルしようとしています。このプログラムは、SHGetKnownFolderPath関数を使用します。私はこれをコンパイルしようとするたびに、私は次のエラーを取得する:C++ LinuxからWindowsへクロスコンパイルエラー
$ x86_64-w64-mingw32-g++ main.cpp main.h -mwindows -o main.exe
/tmp/cc7yIaVK.o:main.cpp:(.text+0x11c): undefined reference to `SHGetKnownFolderPath'
/tmp/cc7yIaVK.o:main.cpp:(.rdata$.refptr.FOLDERID_Startup[.refptr.FOLDERID_Startup]+0x0): undefined reference to `FOLDERID_Startup'
collect2: error: ld returned 1 exit status
ここで私が書いたコードです:
int WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nShowCmd){
//get startup folder
if(SHGetKnownFolderPath(FOLDERID_Startup, 0, NULL, &startupFolder) != S_OK){
//error in getting startup folder
return -1;
}
/*
...
*/
}
私は、適切なヘッダファイルを含まれており、Windowsのバージョンに定義:
は、#define WINVER 0x0600
#define _WIN32_WINNT 0x0600
#include <shlobj.h>
EDIT:mingw.orgのドキュメントによれば、コンパイル時にlibファイルをリンクする必要があることがわかりました。おそらく、ソースファイル名の後ろに-lフラグが付いています。私は必要なファイルの名前が何であるかはわかりません。
私は他に何をすべきかわかりません。
ありがとうございました。 (Windowsバイナリを認識し、適切なナノメートルで)
'#のinclude'sと'#のdefine'sは、コンパイル時間のためにだけに興味深いです:
は、私は少しテストプログラムを作りました。コンパイルエラーはなくリンカーエラーです。リンカーに必要なものを提供するためには、あなたが自分のものと一緒にリンクしなければならないものを見つけ出す必要があります。 https://github.com/HandBrake/HandBrake/issues/112は役に立ちますか? – Alfe@Alfe Googleのリンクも見ましたが、うまくいきません。明らかに、これらのサイトには現在DDoS攻撃があります:http://www.pcworld.com/article/3133847/internet/ddos-attack-on-dyn-knocks-spotify-twitter-githubetsets-and-more- offline.html – Yapoz
QT/MinGW 4.8で[SHChangeNotifyRegister]の可能な複製がリンクできません](http://stackoverflow.com/questions/18048068/shchangenotifyregister-with-qt-mingw-4-8-cannot-link) – krOoze