web-dev-qa-db-ja.com

binding.gypnode-gypのnode.js拡張機能で静的ライブラリに依存関係を追加する方法

Node.js拡張子を作成するための単純なbinding.gypファイルがあります。ライブラリ「mylib」のリンク方法を変更し、共有ライブラリを使用する代わりに静的にリンクしたいと思います。

{
  "targets": [
    {
      "target_name": "myext",
      "sources": [
        "code/main.cpp",
        "code/load.cpp",
        "include/load.h"
      ],
      "include_dirs": [
        "include", "../Library/include"
      ],
      "libraries": [
        "-lmylib", "-L/home/admin/MyLib/Library/binaries/linux/Release"
      ],
      "cflags!": [ "-fno-exceptions" ],
      "cflags": [ "-std=c++11" ],
      "cflags_cc!": [ "-fno-exceptions" ]
    }
  ]
}

Mylibの静的バージョンと共有バージョンは同じディレクトリにあります。

# ls /home/admin/MyLib/Library/binaries/linux/Release
libmylib.a libmylib.so

ライブラリのインストール/ロードの問題を回避するために、静的にリンクしたいと思います。

15
Alex Netkachov

「ライブラリ」セクションに静的な.aまたは.soファイルのパスを追加するだけです。

"ライブラリ":["/ usr/local/lib/libnetfilter_queue.so.1.3.0"]

6
Val

組み込み変数module_root_dirを使用して、node-gypにパスを挿入させることができます。コードを正しく解釈した場合は、librariesを次のように変更します。

"libraries": [
    "-lmylib",
    "-L<(module_root_dir)/../Library/binaries/linux/Release"
],

トリックをするかもしれません。 .aまたは.soバージョンとリンクするかどうかはわかりませんが、次のことを試すことができることを指定します。

"libraries": [
    "<(module_root_dir)/../Library/binaries/linux/Release/libmylib.a"
],

with out-Lプレフィックスと-lmylib。さらに、ルートディレクトリの上をトラバースできるかどうかは少しわかりません。これまで、モジュールのルートディレクトリより上のものを使用してテストしたことはありません。それ以外は行ってもいいはずです。

6
Ale