この理由は、試してみてはXCode(打ち鳴らすでコンパイル)とOSXを使用している他のチームメンバーとの一貫性の私の開発環境を維持することです。 Visual C++コンパイラはclangコンパイラよりもはるかに厳密ではないので、clangでコンパイルされない変更をコミットする可能性があります。
私は環境を構築実験LLVMを使用するようにVS 2015をインストールする必要がないことを好むだろう:(リンクは削除)
私はLLVM /打ち鳴らすのソースから構築されていないWindows上のツール(、単にダウンロードしたバイナリからインストールされています(リンクは削除されました))、clangを使って "hello world"コンソールアプリケーションを構築して実行することができます。私がやりたい何
は、私は私のコードがコミットするのが安全だろうことを確認するために構築し、定期的に打ち鳴らすとリンクすることを可能にするバッチファイルを持つことです。
も、単純な単一のファイルSDL2アプリケーションをリンクする際、私は次のリンカエラーが表示されます。
LINK : fatal error LNK1561: entry point must be defined
clang++.exe: error: linker command failed with exit code 1561 (use -v to see invocation)
このスレッドは私がからコンパイルするときにそれを行うかどうかはわかりませんが、リンカサブシステムSDL2: LNK1561: entry point must be definedを設定示唆コマンドライン。私が理解しているように、指定されていない場合のデフォルトはCONSOLEです。
私のメインのエントリポイント関数は、メインフォームのint型である(int型のargc、char型*のARGV [])このスレッドごとのように:
CALL "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\vcvars32.bat"
clang++ -std=c++11 main.cpp -I./include/SDL2 -L./lib -lSDL2main -lSDL2
:ここ
Why SDL defines main macro?は、私が使用していますbatファイルであります
私が知る限り、includeとlibraryディレクトリは正しいです。リンカーはライブラリを見つけることができ、コンパイラはインクルードファイルを見ることができます。
物事をシンプルに保つために、私は、コンパイラ/リンカをテストするために使用していたコードはここで見つける怠惰、fooのイントロのチュートリアルからまっすぐに引かれました:http://lazyfoo.net/tutorials/SDL/01_hello_SDL/index2.php
/*This source code copyrighted by Lazy Foo' Productions (2004-2015)
and may not be redistributed without written permission.*/
//Using SDL and standard IO
#include <SDL.h>
#include <stdio.h>
//Screen dimension constants
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
int main(int argc, char* args[])
{
//The window we'll be rendering to
SDL_Window* window = NULL;
//The surface contained by the window
SDL_Surface* screenSurface = NULL;
//Initialize SDL
if(SDL_Init(SDL_INIT_VIDEO) < 0)
{
printf("SDL could not initialize! SDL_Error: %s\n", SDL_GetError());
}
else
{
//Create window
window = SDL_CreateWindow("SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
if(window == NULL)
{
printf("Window could not be created! SDL_Error: %s\n", SDL_GetError());
}
else
{
//Get window surface
screenSurface = SDL_GetWindowSurface(window);
//Fill the surface white
SDL_FillRect(screenSurface, NULL, SDL_MapRGB(screenSurface->format, 0xFF, 0xFF, 0xFF));
//Update the surface
SDL_UpdateWindowSurface(window);
//Wait two seconds
SDL_Delay(2000);
}
}
//Destroy window
SDL_DestroyWindow(window);
//Quit SDL subsystems
SDL_Quit();
return 0;
}
私はこのリンカを受けることになる、なぜ誰もが知っていますWindows下でclangを使用してSDLをリンクするとエラーが発生しますか?あなたが持っていないとき
clang++ -std=c++11 main.cpp -I./include/SDL2 -L./lib -lSDL2main -lSDL2 -Xlinker /subsystem:windows
'-lSDL2main'に注目してください。 - SDL2mainとリンクする前に、' SDL2main'とリンクする必要があります。 –
元の質問ですでに「正しい」順序になっていましたが、とにかく - GNUリンカーでのみです。 MSVCリンカーは、ライブラリの順序を気にしません。 – keltar
ありがとうございますkeltar!解決済み! そして、イワンに感謝しました。私はこれについて疑問に思っていました。古いプロジェクトのシェルスクリプトから作業を引き出しました。 – radcore