2016-11-07 22 views
1

mingw-gccでコンパイルされたexeファイルにアイコンを追加したいと思います。windresを使ってexeにアイコンを追加できません

私はthis SO postの指示に従いましたが、アイコンはWindowsエクスプローラのexeに表示されません。

[編集] 一方私はwindresが実行可能ファイルを破壊することを発見しました。 windresを適用する前に、実行可能ファイルは期待どおりに実行されます。 windresを適用した後、この実行可能ファイルがこのWindowsバージョンと互換性がないことを(大まかに)伝えるWindowsエラーメッセージに実行可能ファイルの結果を呼び出します。

私は間違っていますか?


これは私のディレクトリのレイアウトです:これは私のメイクファイルである

0 ICON "launcher/src/main/resources/JavaLauncher.ico" 

all: launcher/target/JavaLauncher.exe 

launcher/target/JavaLauncher.exe: launcher/src/main/cpp/JavaLauncher.cpp launcher\target 
    /Absolute/Path/to/mingw64/bin/g++.exe $< -o [email protected] -static -l winpthread 
    /Absolute/Path/to/mingw64/bin/windres.exe -v -i launcher/src/main/resources/javaLauncher.rc -o [email protected] 


launcher\target: 
    cmd /c md [email protected] 

これはの出力である

$ ls -lR launcher/ 
launcher/: 
total 508 
drwxr-xr-x 1 me 1049089  0 Aug 20 2015 src/ 
drwxr-xr-x 1 me 1049089  0 Nov 7 10:56 target/ 

launcher/src: 
total 0 
drwxr-xr-x 1 me 1049089 0 Nov 7 10:51 main/ 

launcher/src/main: 
total 4 
drwxr-xr-x 1 me 1049089 0 Nov 7 10:52 cpp/ 
drwxr-xr-x 1 me 1049089 0 Apr 14 2016 resources/ 
drwxr-xr-x 1 me 1049089 0 Nov 4 15:11 scripts/ 

launcher/src/main/cpp: 
total 8 
-rw-r--r-- 1 me 1049089 6793 Nov 7 10:41 JavaLauncher.cpp 

launcher/src/main/resources: 
total 5 
-rw-r--r-- 1 me 1049089 47 Nov 7 10:47 javaLauncher.rc 
-rw-r--r-- 1 me 1049089 2238 Apr 14 2016 JavaLauncher.ico 

launcher/src/main/scripts: 
total 1 
-rw-r--r-- 1 me 1049089 389 Nov 7 10:56 makefile 

launcher/target: 
total 4 
-rwxr-xr-x 1 me 1049089 2502 Nov 7 10:56 JavaLauncher.exe* 

これは私のリソースファイルでありますmake:

/Project/root>/Absolute/Path/to/mingw64\bin\make.exe -f launcher\src\main\scripts\makefile 
cmd /c md launcher\target 
/Absolute/Path/to/mingw64/bin/g++.exe launcher/src/main/cpp/JavaLauncher.cpp -o launcher/target/JavaLauncher.exe -static -l winpthread 
/Absolute/Path/to/mingw64/bin/windres.exe -v -i launcher/src/main/resources/javaLauncher.rc -o launcher/target/JavaLauncher.exe 
Using `/Absolute/Path/to/mingw64/bin/gcc -E -xc -DRC_INVOKED launcher/src/main/resources/javaLauncher.rc' 
Using popen to read preprocessor output 

/Project/root> 

これは、Windowsエクスプローラでの結果である: exe without specified image


[編集] 最終作業溶液はこれです:

mingwPath = $(realpath Path/to/mingw64/bin) 
TARGET_DIR=target 
TARGET_OBJECT_DIR=$(TARGET_DIR)/objects 
TARGET_DIR_NAME=$(subst /,\, $(TARGET_DIR)) 
TARGET_OBJECT_DIR_NAME=$(subst /,\, $(TARGET_OBJECT_DIR)) 
SOURCE_DIR_NAME=src/main 
APP_NAME=MyApp 
TARGET_BASE_NAME=$(TARGET_DIR)/$(APP_NAME) 
TARGET_ARCH=-m32 

all: $(TARGET_OBJECT_DIR_NAME) $(TARGET_BASE_NAME).exe 


$(TARGET_BASE_NAME).exe: $(TARGET_OBJECT_DIR)/$(APP_NAME).o\ 
$(TARGET_OBJECT_DIR)/$(APP_NAME)Res.o $(TARGET_OBJECT_DIR_NAME)  
    $(mingwPath)/g++ $(TARGET_ARCH) -o [email protected] -static -l winpthread $(filter %.o,$^) 

$(TARGET_OBJECT_DIR)/$(APP_NAME).o: $(SOURCE_DIR_NAME)/cpp/$(APP_NAME).cpp 
    $(mingwPath)/g++ $(TARGET_ARCH) -c $< -o [email protected] 

$(TARGET_OBJECT_DIR)/$(APP_NAME)Res.o: $(SOURCE_DIR_NAME)/resources/$(APP_NAME).rc 
    $(mingwPath)/windres -v -i $< -o [email protected] --output-format=coff --target=pe-i386 


$(TARGET_OBJECT_DIR_NAME):$(TARGET_DIR_NAME) 
    echo [email protected] 
    cmd /c md [email protected] 

$(TARGET_DIR_NAME): 
    echo [email protected] 
    cmd /c md [email protected] 

clean: 
    cmd /c del /s /q $(TARGET_DIR_NAME) 

答えて

1

私は、もしわかりませんwindresリソースコンパイラはリソースデータをコンパイルしてexeファイルに直接追加することができますが、これはyここでやろうとしている。たぶんそれは可能ですが、私は少しは検索しましたが、情報に関しては見つけられませんでした。

私はこれを稼働させ、exeアイコンを持っています。プログラムオブジェクトの後にwindresによって生成されたリソースオブジェクトをg++リンカに指定する必要があります。また、g++リンカがプログラムとリソースオブジェクトをリンクする前に、順序を変更してwindresを先に実行して、リソースオブジェクトファイルを生成させます。まだ

all: launcher/target/JavaLauncher.exe 

launcher/target/JavaLauncher.exe: launcher/src/main/cpp/JavaLauncher.cpp launcher\target 
    /Absolute/Path/to/mingw64/bin/windres.exe -v -i launcher/src/main/resources/JavaLauncher.rc -o launcher/src/main/resources/JavaLauncherRes.o 
    /Absolute/Path/to/mingw64/bin/g++.exe $< -o [email protected] launcher/src/main/resources/JavaLauncherRes.o -static 


launcher\target: 
    cmd /c md [email protected] 

enter image description here

+0

ない、私は今、32ビットのターゲットに問題に遭遇したので、確認することができ。参照してください:http://stackoverflow.com/questions/40584265/undefined-reference-to-winmain16-after-applying-windes –

+0

私はあなたに言ったことをしましたか?そのオブジェクトファイルを '-o $ @' –

+0

の後ろのg ++​​リンカに追加すると、新しいmakeファイルはまずウインドウがアイコンを追加する* .oファイルを作成します。それがあなたの答えから得たものです。 –

関連する問題