LoginSignup
2
2

More than 5 years have passed since last update.

IUPのインストールで苦労する話

Last updated at Posted at 2016-04-02

注意

記事を書こうと思ったのが2015年3月頃、公開しようと思ったのが2016年4月なので色々事情が変わっている可能性があります。

文脈

IUP は Lua から扱える GUI Tool Kit です。

Lua から扱える GUI Tool Kit には他にも、 wxLua が挙げられます。wxLua はその名のとおり、wxWidgets ベースになっており、wxLua という wxWidgets アプリケーションに Lua スクリプトを渡すことで、Lua による GUI アプリケーション構築を可能としています。しかし、メンテナンスが 2005 年を境に止まっており、2015 年である現在、使用するのは気が引けます。

一方、IUP は GTK+ ベースであり、ここ最近もメンテナンスされいるようなので、幾分か安心して使用できそうです。
ただし、IUP は Binary Package が配布されているものの、少なくとも自分の Mac OSX 環境(Yosemite 10.10.2)では共有ライブラリのダイナミックローディングに失敗するため、source から install することにしました。

インストール手順は、大抵ここに書いてあるとおりなのですが、Windows / Linux での説明なので、Mac OSX でのビルドに苦労したよ、という話です。

環境

gcc -v

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin14.1.0
Thread model: posix

make -v

GNU Make 3.81

1.Finkのダウンロード

Fink のインストール

Fink は OSX 上に X Window System を導入するためのパッケージ管理システムです。brew で install した GTK+ では、インクルードパスが見つからず、コンパイルに失敗するため、Fink で X Window System を導入します。

Fink
installer(Install Fink.tool)のリポジトリ

いくつかの質問に答えるだけで良いのですが、インストールされるまでが長いので、時間に余裕があるときにインストールすることをお勧めします。
/sw にインストールされます。

Fink でセットアップ

パッケージのインストールやらパスの設定やらをします。こちらを参考にしました。

足りないパッケージは、

sw/bin/fink install hoge
sw/bin/pkg-config --cflags gtk+-2.0

で 下記のように /sw 以下のパスを見ているようであればok.

-I/sw/include/gtk-2.0 -I/sw/lib/gtk-2.0/include -I/sw/include/gtk-2.0 -I/sw/include/pango-1.0 -I/sw/include/atk-1.0 -I/sw/include/cairo -I/sw/include/pango-1.0 -I/sw/include/glib-2.0 -I/sw/lib/glib-2.0/include -I/opt/X11/include -I/opt/X11/include/freetype2

また、下記をしておきます。

export USE_MACOS_OPENGL=Yes
export GTK_BASE=/sw
# x11 ではなく、quartz を利用する
export GTK_MAC=Yes

quarts 依存にする

brew tap acornejo/quartz

brew install gtk+-quartz
brew install pango-quartz
brew install cairo-quartz

export USE_PKGCONFIG=Yes
export PKG_CONFIG_PATH=/opt/loca/lib/pkgconfig:/opt/X11/lib/pkgconfig

2. Lua のインストール

一部のライブラリの生成には Lua のスタティックライブラリ必要なため、なければソースからコンパイルしてインストールしておきましょう。
IUP の Lua Binding のライブラリを生成するため、下記でパスを設定しておきます。
以降の解説では、Lua 5.2 を使用することを前提とします。

# Lua5.1 で使用する場合
# export LUA_SUFFIX=5.1
# export LUA_INC=/usr/local/include/lua5.1
# Lua5.2 で使用する場合
export LUA_SUFFIX=52
export LUA_INC=/usr/local/include/lua5.2
export LUA_LIB=/usr/local/lib

あるいは、本家 Lua に luaconf.h に修正が加えられた LuaBinaries があるので、これを利用することも可能です。 この場合にも include と lib のパスは設定しておきましょう。

LuaBinaries はこちら

なお、LuaBinaries は luaconf.h が書き換えらえており、これによって、

package.cpath = package.cpath..";./lib?51.so"

のように cpath を追加しなくても

require "iuplua"

できるようになっています。

3. IM (An Imagking Tool) のコンパイル

IUP は IM と CD というライブラリに依存しており、CD は IM に依存しています。なので、まず IM からインストールします。

IM のダウンロードはこちら(自分がダウンロードしたのは、im-3.9_Sources.zip)

解凍して、適当なディレクトリに展開後下記でコンパイルします。

cd im
# sudo つけないと tar.gz でダウンロードした場合にうまくいかなかった。zip 形式でダウンロードした場合は sudo つけなくても良かった。
sudo make

しかし、下記のエラーでコンパイル失敗。

Tecmake: linking libim_process_omp.dylib ...
g++ -dynamiclib -Wl -fno-common -headerpad_max_install_names -undefined dynamic_lookup -install_name libim_process_omp.dylib -o ../lib/MacOS1010x86/libim_process_omp.dylib ../obj/im_process_omp/MacOS1010x86/im_arithmetic_bin.o ../obj/im_process_omp/MacOS1010x86/im_morphology_gray.o ../obj/im_process_omp/MacOS1010x86/im_quantize.o ../obj/im_process_omp/MacOS1010x86/im_arithmetic_un.o ../obj/im_process_omp/MacOS1010x86/im_geometric.o ../obj/im_process_omp/MacOS1010x86/im_render.o ../obj/im_process_omp/MacOS1010x86/im_color.o ../obj/im_process_omp/MacOS1010x86/im_histogram.o ../obj/im_process_omp/MacOS1010x86/im_resize.o ../obj/im_process_omp/MacOS1010x86/im_convolve.o ../obj/im_process_omp/MacOS1010x86/im_houghline.o ../obj/im_process_omp/MacOS1010x86/im_statistics.o ../obj/im_process_omp/MacOS1010x86/im_convolve_rank.o ../obj/im_process_omp/MacOS1010x86/im_logic.o ../obj/im_process_omp/MacOS1010x86/im_threshold.o ../obj/im_process_omp/MacOS1010x86/im_effects.o ../obj/im_process_omp/MacOS1010x86/im_morphology_bin.o ../obj/im_process_omp/MacOS1010x86/im_tonegamut.o ../obj/im_process_omp/MacOS1010x86/im_canny.o ../obj/im_process_omp/MacOS1010x86/im_distance.o ../obj/im_process_omp/MacOS1010x86/im_analyze.o ../obj/im_process_omp/MacOS1010x86/im_kernel.o ../obj/im_process_omp/MacOS1010x86/im_remotesens.o ../obj/im_process_omp/MacOS1010x86/im_point.o ../obj/im_process_omp/MacOS1010x86/im_process_counter.o ../obj/im_process_omp/MacOS1010x86/im_convertbitmap.o ../obj/im_process_omp/MacOS1010x86/im_convertcolor.o ../obj/im_process_omp/MacOS1010x86/im_converttype.o -L../lib/MacOS1010x86 -lgomp -lim -lz -lm
ld: library not found for -lgomp
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [../lib/MacOS1010x86/libim_process_omp.dylib] Error 1
make[1]: *** [im_process_omp] Error 2
make: *** [do_all] Error 2

調べてみると、llvm-gcc は Open MP をまだサポートしてないらしい。
というわけで src/Makefile を編集します。

# do_all: im_zlib im im_jp2 im_process im_process_omp im_fftw im_lzo imlua5 imlua_jp2 imlua_process5 imlua_process_omp5 imlua_fftw5 $(WINLIBS)
# omp はコンパイルしない
do_all: im_zlib im im_jp2 im_process im_fftw im_lzo imlua5 imlua_jp2 imlua_process5 imlua_fftw5 $(WINLIBS)

また、Lua5.1 と Lua5.2 の両バージョン向けにコンパイルしても無駄なので、所望のバージョンだけコンパイルしましょう。

# imlua5 以外の箇所も同様です
imlua5:
    # @$(TECMAKE_CMD) MF=imlua5 USE_LUA51=Yes
    @$(TECMAKE_CMD) MF=imlua5 USE_LUA52=Yes

今度は成功し、下記のライブラリが生成されました。

find lib/MacOS1010x86 -iname "lib*"

lib/MacOS1010x86/libim.a
lib/MacOS1010x86/libim.dylib
lib/MacOS1010x86/libim_fftw.a
lib/MacOS1010x86/libim_fftw.dylib
lib/MacOS1010x86/libim_jp2.a
lib/MacOS1010x86/libim_jp2.dylib
lib/MacOS1010x86/libim_lzo.a
lib/MacOS1010x86/libim_lzo.dylib
lib/MacOS1010x86/libim_process.a
lib/MacOS1010x86/libim_process.dylib
lib/MacOS1010x86/libim_process_omp.a
lib/MacOS1010x86/libimlua52.a
lib/MacOS1010x86/libimlua52.so
lib/MacOS1010x86/libimlua_fftw52.a
lib/MacOS1010x86/libimlua_fftw52.so
lib/MacOS1010x86/libimlua_jp252.a
lib/MacOS1010x86/libimlua_jp252.so
lib/MacOS1010x86/libimlua_process52.a
lib/MacOS1010x86/libimlua_process52.so
lib/MacOS1010x86/libz.a
lib/MacOS1010x86/libz.dylib

4.CD (Canvas Draw) のコンパイル

IM のインストールとほぼ同様です。

CDのダウンロードはこちら

(自分がダウンロードしたのは、cd-5.8.1_Sources.zip)

cdgdk + cairo の組み合わせで作成します。
このため、下記のように Makefile / .mak を変更します。

# do_all: cd_zlib cd_freetype cd_ftgl cd cd_pdflib cdpdf cdgl cdcontextplus cdlua5 cdluapdf5 cdluagl5 cdluacontextplus5 cdluaim5
# cdx11 と cdgdk, cario も生成する
do_all: cd_zlib cd_freetype cd_ftgl cdgdk cd_pdflib cdpdf cdgl cdcontextplus cdcairo cdlua5 cdluapdf5 cdluagl5 cdluacontextplus5 cdluacairo5 cdluaim5

cdcontextplus:
    # @$(TECMAKE_CMD) MF=cdcontextplus
    @$(TECMAKE_CMD) MF=cdcontextplus CD_SUFFIX=
cdcairo:
    # @$(TECMAKE_CMD) MF=cdcairo
    @$(TECMAKE_CMD) MF=cdcairo USE_GDK=Yes CD_SUFFIX=

```src/config.mak
# 下記がコメントアウトになっているので外しておく
ifneq ($(findstring MacOS, $(TEC_UNAME)), )
  SRC += cairo/cdcairoprn_unix.c
  ifdef USE_GTK3
    INCLUDES += $(GTK)/include/gtk-3.0/unix-print
    SRC += drv/cd0emf.c
  else
    INCLUDES += $(GTK)/include/gtk-unix-print-2.0
  endif 
endif
cd cd
sudo make
find lib/MacOS1010x86 -iname "lib*"

lib/MacOS1010x86/libcd.a
lib/MacOS1010x86/libcd.dylib
lib/MacOS1010x86/libcdcairo.a
lib/MacOS1010x86/libcdcairo.dylib
lib/MacOS1010x86/libcdcontextplus.a
lib/MacOS1010x86/libcdcontextplus.dylib
lib/MacOS1010x86/libcdgl.a
lib/MacOS1010x86/libcdgl.dylib
lib/MacOS1010x86/libcdlua52.a
lib/MacOS1010x86/libcdlua52.so
lib/MacOS1010x86/libcdluacairo52.a
lib/MacOS1010x86/libcdluacairo52.so
lib/MacOS1010x86/libcdluacontextplus52.a
lib/MacOS1010x86/libcdluacontextplus52.so
lib/MacOS1010x86/libcdluagl52.a
lib/MacOS1010x86/libcdluagl52.so
lib/MacOS1010x86/libcdluaim52.a
lib/MacOS1010x86/libcdluaim52.so
lib/MacOS1010x86/libcdluapdf52.a
lib/MacOS1010x86/libcdluapdf52.so
lib/MacOS1010x86/libcdpdf.a
lib/MacOS1010x86/libcdpdf.dylib
lib/MacOS1010x86/libfreetype.a
lib/MacOS1010x86/libfreetype.dylib
lib/MacOS1010x86/libftgl.a
lib/MacOS1010x86/libftgl.dylib
lib/MacOS1010x86/libpdflib.a
lib/MacOS1010x86/libpdflib.dylib
lib/MacOS1010x86/libz.a
lib/MacOS1010x86/libz.dylib

5. IUP のコンパイル

いよいよ IUP のインストールです。やれやれ...

IUPのダウンロードはこちら(自分がダウンロードしたのは、iup-3.12_Sources.zip)

(最新は 3.1.3 であったが、lib/MacOS1010x86 ではなく、lib/MacOS1010 に lib が生成されてしまったため、3.1.2 にしました。)

例によって、Makefile を修正します。

# do_all: iup iupcd iupcontrols iupgl iupglcontrols iup_plot iup_pplot iup_mglplot iup_scintilla iupim iupimglib $(WINLIBS) iupweb iuptuio ledc iupview iuplua5 iupconsole
do_all: iupgtk iupcd iupcontrols iupgl iupglcontrols iup_plot iup_pplot iup_mglplot iup_scintilla iupim iupimglib ledc iupview $(WINLIBS) iupweb iuptuio iuplua5 iupconsole

また、srclua5/Makefile で所望の Lua バージョンのみコンパイルするようにしておく。

さらに、srcconsole/Makefile では、下記のようにしておきましょう。

do_all: iuplua5gtk

iuplua5gtk:
    @$(TECMAKE_CMD) USE_GTK=Yes USE_LUA52=Yes

そして、

cd iup
sudo make

すると下記のエラー。

Tecmake: linking libiup_plot.dylib ...
g++ -dynamiclib -Wl -fno-common -headerpad_max_install_names -undefined dynamic_lookup -install_name libiup_plot.dylib -o ../lib/MacOS1010x86/libiup_plot.dylib ../obj/iup_plot/MacOS1010x86/iup_plot.o ../obj/iup_plot/MacOS1010x86/iupPlotCalc.o ../obj/iup_plot/MacOS1010x86/iupPlot.o ../obj/iup_plot/MacOS1010x86/iupPlotDraw.o ../obj/iup_plot/MacOS1010x86/iupPlotTick.o ../obj/iup_plot/MacOS1010x86/iup_plot_attrib.o -L../lib/MacOS1010x86 -L../../cd/lib/MacOS1010x86 -liup -liupgl -liupcd -lcdgl -lcd -lGLU -lGL -lm
ld: library not found for -lGLU
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [../lib/MacOS1010x86/libiup_plot.dylib] Error 1
make[1]: *** [iup_plot] Error 2
make: *** [iup_plot] Error 2

GL関連のライブラリが見つからないようなので、これを解決するため(良いのか不明であるが)下記のようにするとコンパイルが通る。

export OPENGL_LIB=/usr/X11R6/lib

また、上記解決後、今度は iupweb のコンパイルに失敗したので、下記をインストールする。

/sw/bin/fink install webkit-1.0.2
/sw/bin/fink install libsoup2.4.1-ssl

これでようやくコンパイルがとおり、iup/lib/MacOS1010x86 にライブラリが生成されました。

適当なディレクトリに生成されたライブラリをコピーし、そのディレクトリで下記のようにして、動作することを確認。

package.cpath = package.cpath..";./lib?52.so"
iup = require "iuplua"
iup.Message('YourApp','Finished Successfully!')

とりあえず、動かすことには成功しましたが、生成するライブラリの組み合わせ/オプション/参照すべきパス等間違っている可能性はあります。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2