LoginSignup
0
1

More than 5 years have passed since last update.

node-gypでc言語連携つくるときにハマった点

Posted at

概要

以前、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だったら

スクリーンショット 2017-07-25 21.52.31.png

この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点、今日プログラミングしてたら、ハマりました。

0
1
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
0
1