在node-sqlite3中使用Gyp中的共享库

我是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有一个如下所示的部分。 我不认为我需要gyp为我做任何编译的sqlite3,所以切换types为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' ] } ] } 

但是,当我使用模块去运行一个程序时,我得到了

node:symbol lookup error:/usr/local/lib/node_modules/sqlite3/build/Release/node_sqlite3.node:undefined symbol: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创build的可执行文件的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) 

显然缺lesslibsqlite3。 所以也许我的ldflags声明并没有按计划进行。

这是答案。

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

在使用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)