環境

はじめはWindowsでやろうとしたけど、途中で躓いたので途中からwsl。

windows編

はじめは\(\TeX \ \mathrm{Live}\)に入ってるluaをtexluaで実行してみた。

これをやるために、途中からluaをインストール。 はじめはソースを落としたがwindowsでは使えなさそう?だったので、素直にbinaryを落としてきて、C:\Program Files\に配置してPathを通した。

途中までは問題なかった1が、Cからluaを呼ぶところでコンパイルが全くできない。 コンパイラはclang-clを使用していたが、まずclang-clがgccやclangと違うことやcコンパイルの仕方を理解するところから始まった2。 結局数時間と化してもlinkerのエラーが解消できなかったので、情報のおおいwslでやり直すことにした。

WSL編

まずaptでインストールしてみたが、ライブラリのリンクに失敗し続けた (具体的には、Archive has no index; run ranlib to add one)。 原因に全く心当たりがなかったが、ここを見る限り、 ライブラリは手動でコンパイルする必要はなさそうなので、ソースからビルドすることにした。

ソースでmakeして、sudo make installしたらインストールできた(簡単だし、一瞬だった)。 ここにはlocateで探すみたいなことが書いてあったが、 ソースに入ってたREADME.htmlをみるとMakefileにインストール先が書いてあるということで、 それらを除いてみると必要なライブラリがあった。 これらへのパスを含めて

gcc -o calllua -Wall call_lua_from_c.c -I/usr/local/include -I/usr/local/lib -llua -lm

したら3、コンパイルに成功した。

Windows編を振り返る

調べていて分かったことは、

  1. .so.o.aといった拡張子はwindowsでは別もの(.dllとか?)
  2. clang-clはgccに対応するclangとは別で、microsoftのcl.exeに対応するもの(vs codeのデフォルトにcl.exeがあった) 当然オプションも違う

なのでWindowsではこれらを反映したコンパイルをする必要がありそう。 幸いlua53.dllがバイナリに入ってたのでそれを使えばいいはず。

追記:Windowsでコンパイル

lua binariesのwin用ライブラリを落としてきて、.libclang-cl/linkオプションに渡したらできた。 バージョンは古いけど(5.4.2)

最終的に

clang-cl.exe /I path\to\libs /link path\to\lua54.libs

で出来た。


  1. ただし日本語はすべて文字化けしていた。 ↩︎

  2. まだ3か月もやってないので許してほしい ↩︎

  3. math.cも必要だった。 ↩︎