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.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage