tof*_*tim 5 sqlite node.js 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'
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
如何更改此设置以便使用共享的sqlite3库?deps文件夹中的binding.gyp有一个如下所示的部分.我不认为我需要gyp为我做任何sqlite3的编译,所以切换类型到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' ]
}
]
}
Run Code Online (Sandbox Code Playgroud)
更新.通过将binding.gyp更改为this,我能够编译
{
'targets': [
{
'target_name': 'node_sqlite3',
'sources': [
'src/database.cc',
'src/node_sqlite3.cc',
'src/statement.cc'
],
'ldflags': [
'-lsqlite3'
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
但是,当我使用该模块运行程序时,我得到了
节点:符号查找错误:/usr/local/lib/node_modules/sqlite3/build/Release/node_sqlite3.node:undefined symbol:sqlite3_open_v2
好像共享库没有加载或无法访问.我想我很亲密.libsqlite3已安装到/ usr/local/lib
Run Code Online (Sandbox Code Playgroud)/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
Run Code Online (Sandbox Code Playgroud)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声明并没有真正按计划工作.
tof*_*tim 15
这是答案.
{
'targets': [
{
'target_name': 'node_sqlite3',
'sources': [
'src/database.cc',
'src/node_sqlite3.cc',
'src/statement.cc'
],
'link_settings': {
'libraries': [
'-lsqlite3'
]
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
使用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)
| 归档时间: |
|
| 查看次数: |
4796 次 |
| 最近记录: |