Verwenden der gemeinsam genutzten Bibliothek in Gyp in node-sqlite3
Ich bin neu bei Gyp. Anstatt meine Abhängigkeit zu kompilieren, möchte ich eine gemeinsam genutzte Bibliothek verwenden, insbesondere die libsqlite3.so, die sich bereits auf meinem Computer befindet. Die main binding.gyp sieht aktuell so aus
{
'targets': [
{
'target_name': 'node_sqlite3',
'sources': [
'src/database.cc',
'src/node_sqlite3.cc',
'src/statement.cc'
],
'dependencies': [
'deps/sqlite3/binding.gyp:sqlite3'
]
}
]
}
Wie ändere ich das, damit eine gemeinsam genutzte sqlite3-Bibliothek verwendet wird? Das Verzeichnis binding.gyp im Ordner deps enthält einen Abschnitt, der wie folgt aussieht. Ich glaube nicht, dass ich gyp brauche, um eine Kompilierung von sqlite3 für mich durchzuführen. Daher ist es wahrscheinlich nicht die richtige Antwort, auf shared_library zu wechseln.
'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' ]
}
]
}
Aktualisieren. Ich konnte Dinge zum Kompilieren bringen, indem ich sie durch Binden von gyp an diese änderte
{
'targets': [
{
'target_name': 'node_sqlite3',
'sources': [
'src/database.cc',
'src/node_sqlite3.cc',
'src/statement.cc'
],
'ldflags': [
'-lsqlite3'
]
}
]
}
Wenn ich jedoch ein Programm mit dem Modul starte, bekomme ich
Knoten: Symbolsuchfehler: /usr/local/lib/node_modules/sqlite3/build/Release/node_sqlite3.node: undefiniertes Symbol: sqlite3_open_v2
als ob die gemeinsam genutzte Bibliothek nicht geladen wird oder nicht zugänglich ist. Ich glaube ich bin nah dran. libsqlite3 wurde in / usr / local / lib installiert
/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. Die Handlung verdickt sich. Ich habe ldd für die ausführbare Datei ausprobiert, die mit node-sqlite3 erstellt wurde
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)
Eindeutig fehlende libsqlite3. Vielleicht hat meine ldflags-Anweisung also nicht wirklich wie geplant funktioniert.