2019/11/24(日) [n年前の日記]
#1 [gimp] cairo-1.12.6がビルドできない
GIMP 2.8.16 を Windows10 x64 1903 + msys 1.0 + mingw でビルドしようとしているのだけど、cairo のビルドができなくてハマっていたり。
以下のサイトに従って作業しているけれど…。
_Cairo < GTK+に必要なライブラリ群のビルド < ビルド | GIMPのビルド - for Windows -
gcc のバージョンは… --version をつければ見れるのかな。
6.3.0らしい。
以下のサイトに従って作業しているけれど…。
_Cairo < GTK+に必要なライブラリ群のビルド < ビルド | GIMPのビルド - for Windows -
gcc のバージョンは… --version をつければ見れるのかな。
$ gcc --version gcc.exe (MinGW.org GCC-6.3.0-1) 6.3.0 Copyright (C) 2016 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
6.3.0らしい。
◎ strndup.cのコンパイルエラー。 :
util/cairo-missing/strndup.c をビルドしようとすると ssize_t がどうとかのエラーが出る。
_MSYSでGTK+をビルド (2) - 七誌の開発日記
本来、cairo-1.12.6-ssizet.patch によって、config.h 内に、
util/cairo-missing/cairo-compiler-private.h というファイルを作成して、以下を記述してみた。
これで、cairo-missing.h 内の、いくつかの定義がスキップされるはず。一応、util/cairo-missing/strndup.c のコンパイルはできた。
_MSYSでGTK+をビルド (2) - 七誌の開発日記
本来、cairo-1.12.6-ssizet.patch によって、config.h 内に、
#define _SSIZE_T_DEFINED 1の1行が追加されて、「_SSIZE_T_DEFINED は定義済みだから ssize_t の再定義はしなくていいよ」ということになって、問題は出ないはずなのだけど。どうやら util/cairo-missing/ の中では、config.h は見ていないようで。
util/cairo-missing/cairo-compiler-private.h というファイルを作成して、以下を記述してみた。
#define _SSIZE_T_DEFINED 1 #define HAVE_GETLINE 1 #define HAVE_STRNDUP 1
これで、cairo-missing.h 内の、いくつかの定義がスキップされるはず。一応、util/cairo-missing/strndup.c のコンパイルはできた。
◎ api-special-cases.c でコンパイルエラー。 :
今度は、api-special-cases.c でエラーが出る。
likely って何だろう…?
grep したところ、src/cairo-compiler-private.h の中で定義が見つかった。cairo-test.h の最後のほうに、cairo-compiler-private.h 内の likely 関係の定義部分をまるっとコピペしてみた。一応ビルドが通った。
make[4]: Entering directory `/d/home/USERNAME/working/sources/cairo-1.12.6/test' CC cairo_test_suite-api-special-cases.o api-special-cases.c: In function 'test_cairo_surface_get_font_options': api-special-cases.c:237:9: error: implicit declaration of function 'likely' [-Werror=implicit-function-declaration] if (likely (!cairo_font_options_status (options))) ^~~~~
api-special-cases.c:237:5: warning: nested extern declaration of 'likely' [-Wnested-externs] if (likely (!cairo_font_options_status (options))) ^
cc1.exe: some warnings being treated as errors make[4]: *** [cairo_test_suite-api-special-cases.o] Error 1
likely って何だろう…?
grep したところ、src/cairo-compiler-private.h の中で定義が見つかった。cairo-test.h の最後のほうに、cairo-compiler-private.h 内の likely 関係の定義部分をまるっとコピペしてみた。一応ビルドが通った。
◎ cairo-test-suite.exe でエラー :
cairo-test-suite.exe を作るらしいところでエラーが出る。
ググってみたところ、gcc 4.8.x の頃はエラーが出なかったけど、gcc 4.9.0 からエラーが出るようになった、という話を見かけた。
_MinGW-w64 - for 32 and 64 bit Windows / Bugs / #396 4.9.0 cannot build cairo
すると、mingw の gcc をダウングレードしないとダメなのだろうか…。しかし、ググってみても、ダウングレードする方法は見つからず。
gcc に -fno-lto を渡せばなんとかなる、という話も書いてあるようだけど、手元の環境、mingw の gcc 6.3.0 では効果が無いようで。一応、出力されるメッセージは変化してるように見えるけど、結局はエラーが出てビルドが止まってしまう。
make[4]: Entering directory `/d/home/USERNAME/working/sources/cairo-1.12.6/test' CCLD cairo-test-suite.exe C:\Users\USERNAME\AppData\Local\Temp\ccKsBljz.ltrans0.ltrans.o: In function `parse_cmdline': d:\home\USERNAME\working\sources\cairo-1.12.6\test/cairo-test-runner.c:354: undefined reference to `_cairo_getopt' C:\Users\USERNAME\AppData\Local\Temp\ccKsBljz.ltrans0.ltrans.o: In function `runner_print_details': d:\home\USERNAME\working\sources\cairo-1.12.6\test/cairo-test-runner.c:499: undefined reference to `cairo_boilerplate_content_name' d:\home\USERNAME\working\sources\cairo-1.12.6\test/cairo-test-runner.c:532: undefined reference to `cairo_boilerplate_content_name' d:\home\USERNAME\working\sources\cairo-1.12.6\test/cairo-test-runner.c:515: undefined reference to `cairo_boilerplate_content_name' C:\Users\USERNAME\AppData\Local\Temp\ccKsBljz.ltrans0.ltrans.o: In function `append_argv': d:\home\USERNAME\working\sources\cairo-1.12.6\test/cairo-test-runner.c:279: undefined reference to `cairo_boilerplate_xmalloc' ... d:\home\USERNAME\working\sources\cairo-1.12.6\test/a1-mask.c:84: undefined reference to `cairo_boilerplate_xmalloc' C:\Users\USERNAME\AppData\Local\Temp\ccKsBljz.ltrans31.ltrans.o: In function `list_prepend': d:\home\USERNAME\working\sources\cairo-1.12.6\test/cairo-test-runner.c:130: undefined reference to `cairo_boilerplate_xmalloc' collect2.exe: error: ld returned 1 exit status make[4]: *** [cairo-test-suite.exe] Error 1
ググってみたところ、gcc 4.8.x の頃はエラーが出なかったけど、gcc 4.9.0 からエラーが出るようになった、という話を見かけた。
_MinGW-w64 - for 32 and 64 bit Windows / Bugs / #396 4.9.0 cannot build cairo
すると、mingw の gcc をダウングレードしないとダメなのだろうか…。しかし、ググってみても、ダウングレードする方法は見つからず。
gcc に -fno-lto を渡せばなんとかなる、という話も書いてあるようだけど、手元の環境、mingw の gcc 6.3.0 では効果が無いようで。一応、出力されるメッセージは変化してるように見えるけど、結局はエラーが出てビルドが止まってしまう。
◎ 諦めた。 :
GIMP 2.8.x を Windows上でビルドするためには、当時のツールをかき集めて、環境構築までしないといかんようだなと…。
そもそも、特定のGIMPプラグインをWindows上でも使えるようにできたらいいな、というのが当初の目的だったはずで、それは GIMP 2.10.14 を使うことで叶うのだから…。GIMP 2.8.x で動かす云々は、もう諦めよう…。
そもそも、特定のGIMPプラグインをWindows上でも使えるようにできたらいいな、というのが当初の目的だったはずで、それは GIMP 2.10.14 を使うことで叶うのだから…。GIMP 2.8.x で動かす云々は、もう諦めよう…。
[ ツッコむ ]
以上です。