2012-06-14 21 views
5

में Gyp में साझा लाइब्रेरी का उपयोग करके मैं Gyp के लिए नया हूं। मेरी निर्भरता को संकलित करने के बजाय, मैं एक साझा लाइब्रेरी का उपयोग करना चाहूंगा, विशेष रूप से, libsqlite3.so जो पहले से ही मेरी मशीन पर है। मुख्य binding.gyp वर्तमान मेंनोड-एसक्लाइट 3

{ 
    'targets': [ 
    { 
     'target_name': 'node_sqlite3', 
     'sources': [ 
     'src/database.cc', 
     'src/node_sqlite3.cc', 
     'src/statement.cc' 
     ], 
     'dependencies': [ 
     'deps/sqlite3/binding.gyp:sqlite3' 
     ] 
    } 
    ] 
} 

की तरह लग रहा है कि मैं इस बदल सकता हूँ कैसे इतना है कि एक साझा sqlite3 पुस्तकालय प्रयोग किया जाता है? Deps फ़ोल्डर में binding.gyp में एक ऐसा अनुभाग है जो नीचे जैसा दिखता है। मुझे नहीं लगता कि मुझे मेरे लिए sqlite3 का संकलन करने के लिए gyp की आवश्यकता है, इसलिए साझा_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' ] 
    } 
    ] 
} 

अद्यतन। मैं इस

{ 
    'targets': [ 
    { 
     'target_name': 'node_sqlite3', 
     'sources': [ 
     'src/database.cc', 
     'src/node_sqlite3.cc', 
     'src/statement.cc' 
     ], 
     'ldflags': [ 
     '-lsqlite3' 
     ] 
    } 
    ] 
} 

को binding.gyp से बदल रहा है लेकिन, जब मैं मॉड्यूल का उपयोग कर एक कार्यक्रम चलाने के लिए जाना द्वारा संकलित करने के लिए चीजों को प्राप्त करने में सक्षम था, मैं के रूप में अगर साझा

node: symbol lookup error: /usr/local/lib/node_modules/sqlite3/build/Release/node_sqlite3.node: undefined symbol: sqlite3_open_v2

मिल पुस्तकालय लोड नहीं हो रहा है या सुलभ नहीं है। मुझे लगता है कि मैं करीब हूँ। libsqlite3/usr/स्थानीय/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 करने के लिए स्थापित किया गया था। साजिश मोटाई। मैंने नोड-स्क्लाइट 3

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 कथन वास्तव में योजना के रूप में काम नहीं किया था।

उत्तर

15

यहां जवाब है।

{ 
    'targets': [ 
    { 
     'target_name': 'node_sqlite3', 
     'sources': [ 
     'src/database.cc', 
     'src/node_sqlite3.cc', 
     'src/statement.cc' 
     ], 
     'link_settings': { 
      'libraries': [ 
       '-lsqlite3' 
      ] 
     } 
    } 
    ] 
} 

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)

+0

मेरे मामले में, मैं ssl और क्रिप्टो पुस्तकालयों के लिए समर्थन जोड़ने की जरूरत है। मैंने पाया कि टोफुटिम से ऊपर का वाक्यविन्यास एक चीज़ को छोड़कर बहुत उपयोगी था। '-lsqlite3' का उपयोग करने के बजाय, मुझे 'libcrypto.dylib' और 'libssl.dylib' का उपयोग करने की आवश्यकता है। पुस्तकालय विनिर्देश में कोई डैश की आवश्यकता नहीं थी। मैं एक्सकोड संस्करण 6.1.1 के साथ योसमेट, ओएसएक्स 10.10 का उपयोग कर रहा हूं – user2246302