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
いやはや、ハマった…。時間がかかった…。
一応、ビルドできるように修正したソース + 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 内の関係ありそうなところを抜き出すと、以下のような感じ。
_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" を使ってた。
_C と C++ の間で関数や変数を共有する - akihiko’s tech note
_レアポップ: リンクエラーあるある
gimp-texturize のソースを眺めたら、たしかに .cpp の中で extern "C" を使ってた。
[ ツッコむ ]
以上、1 日分です。