私はGypを初めて使用します。依存関係をコンパイルする代わりに、共有ライブラリ、特に、すでにマシン上にあるlibsqlite3.soを使用したいと思います。メインのbinding.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は必要ないと思うので、typeを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' ]
}
]
}
アップデート。Binding.gypをこれに変更することで、コンパイルすることができました
{
'targets': [
{
'target_name': 'node_sqlite3',
'sources': [
'src/database.cc',
'src/node_sqlite3.cc',
'src/statement.cc'
],
'ldflags': [
'-lsqlite3'
]
}
]
}
ただし、モジュールを使用してプログラムを実行すると、次のようになります。
ノード:シンボルルックアップエラー:/usr/local/lib/node_modules/sqlite3/build/Release/node_sqlite3.node:未定義のシンボル:sqlite3_open_v2
共有ライブラリがロードされていないか、アクセスできないかのように。私は近いと思います。libsqlite3が/usr/ local/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
Update2。プロットが厚くなります。node-sqlite3によって作成された実行可能ファイルでlddを試しました
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ステートメントは実際には計画どおりに機能しませんでした。