概要
以前、c言語でつくったライブラリをgoで使えるようにしたときの記事をかきましたが
http://qiita.com/taktod/items/0d87e511388fde7ffe2d
http://qiita.com/taktod/items/278255153b6bba68e95f
今回はそのnodeバージョンのプログラムをさわったときハマったので、記事にしておきます。
いじったのはコレ
https://github.com/taktod/ttLibJsGyp
では、ハマった点をどぞ
日本語を使いたかったらUTF8-BOMにする
CやC++のソースの中で日本語をいれたかったらUTF8ではなくUTF8-BOMにして利用する
自分が利用しているvisual studio codeだったら
このUTF-8の部分をクリックして
エンコード付きで保存
UTF-8 with BOM
を選択すればOK
これをしないと、windowsのnode-gypのコンパイルでソースコードが正しく認識されず、動作しなくなる。
BOM付きにしても、MacやLinuxでは問題ない模様
なお、日本語をいれなければ、BOMにしなくてもOK
この問題があったため、
submoduleで利用しているttLibCからは日本語を排除
ttLibJsGypのcsrcの中身については、BOM付きに変更しました。
パスをきっていても同名のファイルを作ってはいけない。
これもwindowsの制限
csrc/decoder/mp3lame.cpp
と
csrc/encoder/mp3lame.cpp
は両方ともコンパイル結果がmp3lame.oに保存されます。binding.gypでソースコード指定で先にしてある方は、あとから指定された側で上書きされてしまうため
最終的なプログラムのリンク時に、動作の実体がないと怒られるみたいです。
というわけで
csrc/decoder/mp3lameDecoder.cpp
csrc/encoder/mp3lameEncoder.cpp
と、リネームしておきました。
なお、どうしても同名を使いたい場合は
static_libraryとして別々にコンパイルしてから、dependencies指定で
依存させるという形にすれば、なんとかなります。
この2点、今日プログラミングしてたら、ハマりました。