node.js - nodejs - sqlite reactjs
Usando la biblioteca compartida en Gyp en node-sqlite3 (1)
Aquí está la respuesta.
{
''targets'': [
{
''target_name'': ''node_sqlite3'',
''sources'': [
''src/database.cc'',
''src/node_sqlite3.cc'',
''src/statement.cc''
],
''link_settings'': {
''libraries'': [
''-lsqlite3''
]
}
}
]
}
Sobre el uso de 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)
Soy nuevo en Gyp. En lugar de compilar mi dependencia, me gustaría usar una biblioteca compartida, en particular, la libsqlite3.so que ya está en mi máquina. El principal binding.gyp actualmente se ve como
{
''targets'': [
{
''target_name'': ''node_sqlite3'',
''sources'': [
''src/database.cc'',
''src/node_sqlite3.cc'',
''src/statement.cc''
],
''dependencies'': [
''deps/sqlite3/binding.gyp:sqlite3''
]
}
]
}
¿Cómo cambio esto para que se use una biblioteca sqlite3 compartida? El binding.gyp en la carpeta deps tiene una sección que se ve a continuación. No creo que necesite gyp para hacer ninguna compilación de sqlite3 para mí, por lo que cambiar de tipo a shared_library probablemente no sea la respuesta correcta.
''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'' ]
}
]
}
Actualizar. Pude hacer que las cosas compilas cambiando by binding.gyp a esto
{
''targets'': [
{
''target_name'': ''node_sqlite3'',
''sources'': [
''src/database.cc'',
''src/node_sqlite3.cc'',
''src/statement.cc''
],
''ldflags'': [
''-lsqlite3''
]
}
]
}
Sin embargo, cuando voy a ejecutar un programa usando el módulo, obtengo
nodo: error de búsqueda de símbolo: /usr/local/lib/node_modules/sqlite3/build/Release/node_sqlite3.node: undefined symbol: sqlite3_open_v2
como si la biblioteca compartida no se está cargando o no es accesible. Creo que estoy cerca. libsqlite3 se instaló en / 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
Actualización2. La trama se complica. Intenté ldd en el ejecutable creado por 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)
Claramente faltaba libsqlite3. Así que tal vez mi declaración de ldflags realmente no funcionó según lo planeado.