背景
libtrusterdなるリポジトリを作って、こっそり活動していたら、
なんと! trusterdの作者の@matsumotory さんからtrusterdに
リポジトリを移動して、こっちで開発しない?
(英語でのお誘いのため、一部意訳かも)
ということで、前々からSEO的に絶対有効だと思われるGo言語対応を
ほぼ、cgoでのqsortの例を見つけ、paiza.ioの枯れている版と思われる
goで動かせたので、これは行けると思い、早速作業。
1階層上のフォルダの共有ライブラリをリンク
goの例もexamplesというフォルダに入れることして、
├── libtrusterd.dylib
├── examples
│ └── trusterdGo.go
cgoの部分
// #cgo LDFLAGS: -L.. -ltrusterd
これで、go build は上手く行き、実行ファイルが出来るのです。
ところが
実行すると、
./trusterdGo
dyld: Library not loaded: libtrusterd.dylib
Referenced from: /Users/kjunichi/work/mruby/libtrusterd/examples/./trusterdGo
Reason: image not found
Trace/BPT trap: 5
動かすには
install_name_toolというツールで、実行ファイルがリンクしている
ライブラリ名を書き換えることで、1階層上の共有ライブラリを実行時にロード
できるようになった。
install_name_tool -change libtrusterd.dylib ../libtrusterd.dylib trusterdGo
install_name_tool前
otool -L trusterdGo
trusterdGo:
libtrusterd.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)
install_name_tool後
otool -L trusterdGo
trusterdGo:
../libtrusterd.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)
libtrusterdとは
mrubyで作られた高速なhttp2サーバーであるtrusterdを共有ライブラリ化することで、
Python、OCaml、Node.js、その他libffiが使える言語からこのtrusterdを
動かすことを可能にしたものです。
参考リンク
関連記事
- node-ffiをGoで入門してElectronを使って応用してみる
- GIMPのプラグインをGoで書く(その1)
- GoでFaceTime HDカメラやWebカメラを使う
- Goオールスターズ2に行くので、gopheronをGo言語で動かせるようにした #websocket
- Goオールスターズ2に行った
- Goの学習メモ~ファイルの存在チェックとWindowsでのファイルパスの扱い~
- Go言語でコマンドプロンプトに画像を表示するコマンドを作って、Vimの:terminalで表示させた
- Goの符号なし整数の計算でハマった件
- WindowsでmrubyからGoで作ったライブラリを呼び出して、Webカメラの画像をコマンドプロンプトに表示した
- RustでGoのライブラリを使うときのCargoのbuild.rsの書き方