2012-06-14 13 views
5

Gypを初めて使用しました。私の依存関係をコンパイルするのではなく、共有ライブラリ、特に私のマシン上にあるlibsqlite3.soを使用したいと思います。メインバインディング.gypは現在のように見えますノード-sqlite3のGypで共有ライブラリを使用する

{ 
    'targets': [ 
    { 
     'target_name': 'node_sqlite3', 
     'sources': [ 
     'src/database.cc', 
     'src/node_sqlite3.cc', 
     'src/statement.cc' 
     ], 
     'dependencies': [ 
     'deps/sqlite3/binding.gyp:sqlite3' 
     ] 
    } 
    ] 
} 

共有sqlite3ライブラリを使用するように変更するにはどうすればよいですか? depsフォルダのbinding.gypには、以下のようなセクションがあります。私は私のためにsqlite3のコンパイルを行うためにgypが必要だとは思わないので、shared_libraryにタイプを切り替えることはおそらく正しい答えではありません。

'targets': [ 
    { 
     'target_name': 'sqlite3', 
     'type': 'static_library', 
     'include_dirs': [ '.' ], 
     'direct_dependent_settings': { 
     'include_dirs': [ '.' ], 
     'defines': [ 
      'SQLITE_THREADSAFE=1', 
      'SQLITE_ENABLE_FTS3', 
      'SQLITE_ENABLE_RTREE' 
     ], 
     }, 
     'defines': [ 
     '_REENTRANT=1', 
     'SQLITE_THREADSAFE=1', 
     'SQLITE_ENABLE_FTS3', 
     'SQLITE_ENABLE_RTREE' 
     ], 
     'sources': [ './sqlite3.c', ], 
    }, 

    { 
     'target_name': 'shell', 
     'type': 'executable', 
     'dependencies': [ 'sqlite3' ], 
     'sources': [ './shell.c' ] 
    } 
    ] 
} 

更新。私はモジュールを使用してプログラムを実行するために行くとき、しかし、この

{ 
    'targets': [ 
    { 
     'target_name': 'node_sqlite3', 
     'sources': [ 
     'src/database.cc', 
     'src/node_sqlite3.cc', 
     'src/statement.cc' 
     ], 
     'ldflags': [ 
     '-lsqlite3' 
     ] 
    } 
    ] 
} 

にbinding.gypによって変更することにより、コンパイルに物事を得ることができた、私は共有かのよう

node: symbol lookup error: /usr/local/lib/node_modules/sqlite3/build/Release/node_sqlite3.node: undefined symbol: sqlite3_open_v2

を取得しますライブラリがロードされていないか、アクセスできません。私は近くにいると思う。 libsqlite3は、/ usr//ローカルlibの

/usr/local/lib$ ls 
libsqlite3.a libsqlite3.so libsqlite3.so.0.8.6 node_modules python2.7 
libsqlite3.la libsqlite3.so.0 node     pkgconfig 

アップデート2にインストールされました。プロットが濃くなります。私はlddをnode-sqlite3によって作成された実行ファイルで試しました。

linux-vdso.so.1 => (0x00007fffd7168000) 
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fc9451df000) 
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc944fc2000) 
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc944c04000) 
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc94490a000) 
    /lib64/ld-linux-x86-64.so.2 (0x00007fc945704000) 
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fc9446f4000) 

明らかにlibsqlite3がありません。だからおそらく私のldflagsステートメントは実際には計画どおりには機能しませんでした。

答えて

15

ここに答えがあります。 LDDの使用に

​​

:私の場合は

~/node-sqlite3/build/Release$ ldd node_sqlite3.node linux-vdso.so.1 => (0x00007fffe9548000) > libsqlite3.so.0 => /usr/local/lib/libsqlite3.so.0 (0x00007f6649504000) libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f66491ff000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f6648fe1000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6648c24000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f6648a20000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f6648725000) /lib64/ld-linux-x86-64.so.2 (0x00007f66499cd000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f664850f000)

+0

は、私は、SSLと暗号ライブラリのサポートを追加する必要がありました。私はtofutimの上記の構文が1つのことを除いて非常に有用であることを発見しました。 '-lsqlite3'を使う代わりに、 'libcrypto.dylib'と 'libssl.dylib'を使う必要がありました。ライブラリ仕様にはダッシュが必要ありませんでした。 Xcodeバージョン6.1.1でヨセミテ、OSX 10.10を使用しています – user2246302

関連する問題