mieki256's diary



2019/12/01() [n年前の日記]

#1 [gimp] GIMP 2.8.22 Portableで動くgimp-texturizeのバイナリをビルドできた

Windows10 x64 1903 + GIMP 2.8.22 Portable 上で動く、 _gimp-texturizeプラグイン のバイナリ(texturize.exe)を、ようやくビルドできた。と思う。たぶん。手元の環境ではちゃんと動いてる。

一応、ビルドできるように修正したソース + Makefile + texturize.exe を、zip にして置いときます。

_gimp-texturize_gimp28_c_20191201.zip

いやはや、ハマった…。時間がかかった…。

ビルドについて。 :

ビルドには、petit-msys-mingw-gimp28(v3).7z が必要。以下から辿って入手。

_Small Windows compilation environment for Gimp 2.8 32-bit - Page 5 - GIMP Chat

c と cpp が混在しているプラグインだったので、かなりハマってしまったけれど…。どうやら g++ のリンカ用オプションとして、-static-libgcc -static-libstdc++ を追加してやれば良かった模様。C++で書いた部分を動かすために libstdc++ が必要になるから、静的リンクをしてやるのだろうか。一応、GIMP側に libstdc++-6.dll てのがあるので、それが使われるのかと思ってたけど、バージョン違いで動かなかったりするのかなと。いや、分からんけど。

_Makefile 内の関係ありそうなところを抜き出すと、以下のような感じ。

CFLAGS = -g -pipe -O3 -mms-bitfields -march=i686 -s -Wall -Wno-unused-variable -Wno-pointer-sign -Wno-parentheses $(INCDIR) -Wl,-luuid -DGIMP_DISABLE_DEPRECATED

CXXFLAGS = -g -pipe -O3 -mms-bitfields -march=i686 -s -Wall -Wno-parentheses -Wno-unused-variable $(INCDIR) -Wl,-luuid -DGIMP_DISABLE_DEPRECATED

LDFLAGS = -g -s -mwindows -lpthread -mms-bitfields $(LIBS) -static-libgcc -static-libstdc++

$(TARGET): $(OBJECTS)
	$(CXX) -o $@ $(OBJECTS) $(LDFLAGS)

.c.o:
	$(CC) -c -o $@ $< $(CFLAGS)

.cpp.o:
	$(CXX) -c -o $@ $< $(CXXFLAGS)

C++で書いた関数をCから呼び出すソレ。 :

C++で書いた関数を、どうやってCから呼び出すのか分からなかったけど。extern "C" とやらが絡んでくるらしい。

_C と C++ の間で関数や変数を共有する - akihiko’s tech note
_レアポップ: リンクエラーあるある

gimp-texturize のソースを眺めたら、たしかに .cpp の中で extern "C" を使ってた。

以上です。

過去ログ表示

Prev - 2019/12 -
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project