目次
- 目次
- はじめに
- 基本的なやりかた
- 1. mingwの64bit版とgccの64bit版をインストールする。
- 2. 環境変数の設定
- 3. コードのコンパイル&Juliaから実行する
- 参考資料
- MyEnigma Supporters
はじめに
Juliaでは、ccallという関数を使うと、
簡単にc言語のコードから生成された
共有ライブラリの関数を利用することができますが、
Windows10+Julia1.0で実施しようと思ったところ、
色々ハマったので、やり方をメモとして残しておきます。
基本的なやりかた
基本的に下記の記事の通りに実施できます。
Making/compiling C functions for use in Julia on Windows | Codementor
How to make a C function compiled by myself available to `ccall`? - Usage - JuliaLang
しかし、色々説明されてないところや、
内容が古い部分があるので、注意が必要です。
1. mingwの64bit版とgccの64bit版をインストールする。
普通にmingwをインストールすると、32bit版であることが多いです。
mingwの64bit版はここからダウンロードできます。
次の注意点は、インストーラをデフォルト設定のままインストールすると、
mingwは64bitですが、gccが32bitになってしまうので、
インストーラの設定画面で、
Architectureをi686 -> x86_64に設定してインストールする必要があります。
インストール後に、mingwのコンソールから、
$ gcc --version
とし、64bit版が入っているか確認します。
インストールしても、gccが認識しない場合は、
mingwのterminalを起動し、gccのパスを確認した後、
そのパスを環境変数のPathに追加します。
2. 環境変数の設定
LD_LIBRARY_PATHという環境変数に、
dllにしたいCコードがあるディレクトリを指定します。
export LD_LIBRARY_PATH="to/path/ccode"
3. コードのコンパイル&Juliaから実行する
最後に、下記の記事のコードを使って、
Cコードをコンパイルしてdllを作成し、
Juliaからccallでdllの関数を利用します。
しかし、前述のコードはJulia0.6用で、
Julia1.0では、Libdl.dlextが無くなっているので、
下記のコードの部分を
# compile the C code into a shared library open(`gcc -fPIC -O3 -msse3 -xc -shared -o $(Clib * "." * Libdl.dlext) -`, "w") do f print(f, C_code) end
下記のように変更します。
# compile the C code into a shared library open(`gcc -fPIC -O3 -msse3 -xc -shared -o $(Clib * ".dll") -`, "w") do f print(f, C_code) end
そうすれば、前述の記事のコードのように、
cのコードからdllを生成し、Juliaからccallで利用することができます。
参考資料
MyEnigma Supporters
もしこの記事が参考になり、
ブログをサポートしたいと思われた方は、
こちらからよろしくお願いします。