Использование общей библиотеки в Gyp в node-sqlite3
Я новичок в 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? В папке binding.gyp в папке deps есть раздел, который выглядит ниже. Я не думаю, что мне нужен 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' ]
}
]
}
Update. Я был в состоянии получить вещи для компиляции, изменив, привязав к этому
{
'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. Сюжет утолщается. Я пробовал 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 не сработало, как планировалось.