2013-01-31 38 views
6

मैंने काफी खोज की है, और मुझे इसी प्रश्न में सबसे नज़दीकी चीज़ मिली (यह भी अनुत्तरित) प्रश्न:ओएसएक्स 10.7.5 पर नोड-जीईपी - डाइल्ड: आलसी प्रतीक बाध्यकारी असफल: प्रतीक नहीं मिला

Symbol not found: _libintl_gettext

मैं libpuzzle के लिए एक पतली C++ आवरण बनाने के लिए प्रयास कर रहा हूँ।

$ node --version 
v0.8.18 
$ npm --version 
1.2.4 
$ node-gyp --version 
v0.8.3 

Source code on github

का निर्माण करने की कोशिश कर रहा

$ node-gyp clean configure build && node test.js 
gyp info it worked if it ends with ok 
gyp info using [email protected] 
gyp info using [email protected] | darwin | x64 
gyp info spawn python 
gyp info spawn args [ '/opt/local/lib/node_modules/node-gyp/gyp/gyp', 
gyp info spawn args 'binding.gyp', 
gyp info spawn args '-f', 
gyp info spawn args 'make', 
gyp info spawn args '-I', 
gyp info spawn args '/.../node-puzzle/build/config.gypi', 
gyp info spawn args '-I', 
gyp info spawn args '/opt/local/lib/node_modules/node-gyp/addon.gypi', 
gyp info spawn args '-I', 
gyp info spawn args '/.../.node-gyp/0.8.18/common.gypi', 
gyp info spawn args '-Dlibrary=shared_library', 
gyp info spawn args '-Dvisibility=default', 
gyp info spawn args '-Dnode_root_dir=/.../.node-gyp/0.8.18', 
gyp info spawn args '-Dmodule_root_dir=/.../node-puzzle', 
gyp info spawn args '--depth=.', 
gyp info spawn args '--generator-output', 
gyp info spawn args 'build', 
gyp info spawn args '-Goutput_dir=.' ] 
gyp info spawn make 
    CXX(target) Release/obj.target/puzzle/puzzle.o 
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ] 
    SOLINK_MODULE(target) Release/puzzle.node 
    SOLINK_MODULE(target) Release/puzzle.node: Finished 
gyp info ok 
dyld: lazy symbol binding failed: Symbol not found: __Z19puzzle_init_contextP14PuzzleContext_ 
    Referenced from: /.../node-puzzle/build/Release/puzzle.node 
    Expected in: dynamic lookup 

dyld: Symbol not found: __Z19puzzle_init_contextP14PuzzleContext_ 
    Referenced from: /.../node-puzzle/build/Release/puzzle.node 
    Expected in: dynamic lookup 

ठीक है (मैं हाथ से पथ ... शॉर्ट है), तो यह त्रुटि मेरे लिए समझ में आता है, स्पष्ट रूप से यह नहीं कर सकते एक गतिशील पुस्तकालय लोड करें।

पहले मैंने सोचा कि मुझे लिंकर सेटिंग्स को शामिल करने के लिए अपने binding.gyp को समायोजित करना था, इसलिए मैंने कई अलग-अलग कॉन्फ़िगरेशन की कोशिश की।

$ ll /opt/local/lib/libpuzzle.* 
-rwxr-xr-x 1 root admin 19K Jan 30 21:24 /opt/local/lib/libpuzzle.1.dylib 
-rw-r--r-- 1 root admin 20K Jan 30 21:24 /opt/local/lib/libpuzzle.a 
lrwxr-xr-x 1 root admin 17B Jan 30 21:24 /opt/local/lib/libpuzzle.dylib -> libpuzzle.1.dylib 
-rwxr-xr-x 1 root admin 1.3K Jan 30 21:24 /opt/local/lib/libpuzzle.la 

$ ll /opt/local/lib/libgd.* 
-rwxr-xr-x 1 root admin 252K Sep 2 23:59 /opt/local/lib/libgd.2.dylib 
-rw-r--r-- 1 root admin 289K Sep 2 23:59 /opt/local/lib/libgd.a 
lrwxr-xr-x 1 root admin 13B Sep 2 23:59 /opt/local/lib/libgd.dylib -> libgd.2.dylib 
-rwxr-xr-x 1 root admin 1.2K Sep 2 23:59 /opt/local/lib/libgd.la 

मैं बस को समझ नहीं सकता dyld पाने के लिए उन्हें देखने के लिए:

{ 
    "targets": [ 
     { 
      "target_name": "puzzle", 
      "sources": [ "puzzle.cc" ], 
      "link_settings": { 
       "libraries": [ 
        "/opt/local/lib/libgd.dylib", 
        "/opt/local/lib/libpuzzle.dylib" 
       ], 
      } 
     } 
    ] 
} 

मैं libs यहाँ: इस समय इस तरह क्या यह लग रहा है है। मैंने कोई लाभ नहीं लेने के लिए DYLD_FRAMEWORK_PATH और DYLD_FALLBACK_LIBRARY_PATH समायोजित करने का प्रयास किया है।

अद्यतन: उत्पादन से otool

otool -l build/Release/puzzle.node

build/Release/puzzle.node: 
Load command 0 
     cmd LC_SEGMENT_64 
    cmdsize 552 
    segname __TEXT 
    vmaddr 0x0000000000000000 
    vmsize 0x0000000000002000 
    fileoff 0 
filesize 8192 
    maxprot 0x00000007 
initprot 0x00000005 
    nsects 6 
    flags 0x0 
Section 
    sectname __text 
    segname __TEXT 
     addr 0x0000000000000edc 
     size 0x00000000000008d8 
    offset 3804 
    align 2^2 (4) 
    reloff 0 
    nreloc 0 
    flags 0x80000400 
reserved1 0 
reserved2 0 
Section 
    sectname __stubs 
    segname __TEXT 
     addr 0x00000000000017b4 
     size 0x000000000000010e 
    offset 6068 
    align 2^1 (2) 
    reloff 0 
    nreloc 0 
    flags 0x80000408 
reserved1 0 (index into indirect symbol table) 
reserved2 6 (size of stubs) 
Section 
    sectname __stub_helper 
    segname __TEXT 
     addr 0x00000000000018c4 
     size 0x000000000000021c 
    offset 6340 
    align 2^2 (4) 
    reloff 0 
    nreloc 0 
    flags 0x80000400 
reserved1 0 
reserved2 0 
Section 
    sectname __cstring 
    segname __TEXT 
     addr 0x0000000000001ae0 
     size 0x00000000000001ea 
    offset 6880 
    align 2^0 (1) 
    reloff 0 
    nreloc 0 
    flags 0x00000002 
reserved1 0 
reserved2 0 
Section 
    sectname __unwind_info 
    segname __TEXT 
     addr 0x0000000000001cca 
     size 0x000000000000008c 
    offset 7370 
    align 2^0 (1) 
    reloff 0 
    nreloc 0 
    flags 0x00000000 
reserved1 0 
reserved2 0 
Section 
    sectname __eh_frame 
    segname __TEXT 
     addr 0x0000000000001d58 
     size 0x00000000000002a8 
    offset 7512 
    align 2^3 (8) 
    reloff 0 
    nreloc 0 
    flags 0x00000000 
reserved1 0 
reserved2 0 
Load command 1 
     cmd LC_SEGMENT_64 
    cmdsize 472 
    segname __DATA 
    vmaddr 0x0000000000002000 
    vmsize 0x0000000000001000 
    fileoff 8192 
filesize 4096 
    maxprot 0x00000007 
initprot 0x00000003 
    nsects 5 
    flags 0x0 
Section 
    sectname __dyld 
    segname __DATA 
     addr 0x0000000000002000 
     size 0x0000000000000010 
    offset 8192 
    align 2^3 (8) 
    reloff 0 
    nreloc 0 
    flags 0x00000000 
reserved1 0 
reserved2 0 
Section 
    sectname __got 
    segname __DATA 
     addr 0x0000000000002010 
     size 0x0000000000000010 
    offset 8208 
    align 2^3 (8) 
    reloff 0 
    nreloc 0 
    flags 0x00000006 
reserved1 45 (index into indirect symbol table) 
reserved2 0 
Section 
    sectname __la_symbol_ptr 
    segname __DATA 
     addr 0x0000000000002020 
     size 0x0000000000000168 
    offset 8224 
    align 2^3 (8) 
    reloff 0 
    nreloc 0 
    flags 0x00000007 
reserved1 47 (index into indirect symbol table) 
reserved2 0 
Section 
    sectname __data 
    segname __DATA 
     addr 0x0000000000002190 
     size 0x0000000000000060 
    offset 8592 
    align 2^4 (16) 
    reloff 0 
    nreloc 0 
    flags 0x00000000 
reserved1 0 
reserved2 0 
Section 
    sectname __const 
    segname __DATA 
     addr 0x00000000000021f0 
     size 0x0000000000000030 
    offset 8688 
    align 2^4 (16) 
    reloff 0 
    nreloc 0 
    flags 0x00000000 
reserved1 0 
reserved2 0 
Load command 2 
     cmd LC_SEGMENT_64 
    cmdsize 72 
    segname __LINKEDIT 
    vmaddr 0x0000000000003000 
    vmsize 0x0000000000002000 
    fileoff 12288 
filesize 6648 
    maxprot 0x00000007 
initprot 0x00000001 
    nsects 0 
    flags 0x0 
Load command 3 
      cmd LC_ID_DYLIB 
     cmdsize 48 
     name @rpath/puzzle.node (offset 24) 
    time stamp 1 Wed Dec 31 19:00:01 1969 
     current version 0.0.0 
compatibility version 0.0.0 
Load command 4 
    cmd LC_SYMTAB 
cmdsize 24 
    symoff 12720 
    nsyms 138 
    stroff 15344 
strsize 3592 
Load command 5 
      cmd LC_DYSYMTAB 
     cmdsize 80 
     ilocalsym 0 
     nlocalsym 76 
    iextdefsym 76 
    nextdefsym 19 
     iundefsym 95 
     nundefsym 43 
     tocoff 0 
      ntoc 0 
     modtaboff 0 
     nmodtab 0 
    extrefsymoff 0 
    nextrefsyms 0 
indirectsymoff 14976 
    nindirectsyms 92 
     extreloff 14928 
     nextrel 6 
     locreloff 12288 
     nlocrel 50 
Load command 6 
    cmd LC_UUID 
cmdsize 24 
    uuid 9A75E329-2D02-3AC8-A249-A741702EB141 
Load command 7 
     cmd LC_VERSION_MIN_MACOSX 
    cmdsize 16 
    version 10.5 
     sdk 10.7 
Load command 8 
      cmd LC_LOAD_DYLIB 
     cmdsize 64 
     name /opt/local/lib/libssl.1.0.0.dylib (offset 24) 
    time stamp 2 Wed Dec 31 19:00:02 1969 
     current version 1.0.0 
compatibility version 1.0.0 
Load command 9 
      cmd LC_LOAD_DYLIB 
     cmdsize 64 
     name /opt/local/lib/libcrypto.1.0.0.dylib (offset 24) 
    time stamp 2 Wed Dec 31 19:00:02 1969 
     current version 1.0.0 
compatibility version 1.0.0 
Load command 10 
      cmd LC_LOAD_DYLIB 
     cmdsize 56 
     name /opt/local/lib/libgd.2.dylib (offset 24) 
    time stamp 2 Wed Dec 31 19:00:02 1969 
     current version 3.0.0 
compatibility version 3.0.0 
Load command 11 
      cmd LC_LOAD_DYLIB 
     cmdsize 64 
     name /opt/local/lib/libpuzzle.1.dylib (offset 24) 
    time stamp 2 Wed Dec 31 19:00:02 1969 
     current version 2.0.0 
compatibility version 2.0.0 
Load command 12 
      cmd LC_LOAD_DYLIB 
     cmdsize 56 
     name /usr/lib/libstdc++.6.dylib (offset 24) 
    time stamp 2 Wed Dec 31 19:00:02 1969 
     current version 52.0.0 
compatibility version 7.0.0 
Load command 13 
      cmd LC_LOAD_DYLIB 
     cmdsize 56 
     name /usr/lib/libSystem.B.dylib (offset 24) 
    time stamp 2 Wed Dec 31 19:00:02 1969 
     current version 159.1.0 
compatibility version 1.0.0 
Load command 14 
      cmd LC_LOAD_DYLIB 
     cmdsize 56 
     name /usr/lib/libgcc_s.1.dylib (offset 24) 
    time stamp 2 Wed Dec 31 19:00:02 1969 
     current version 1094.0.0 
compatibility version 1.0.0 
Load command 15 
     cmd LC_FUNCTION_STARTS 
    cmdsize 16 
    dataoff 12688 
datasize 32 
Load command 16 
     cmd LC_DATA_IN_CODE 
    cmdsize 16 
    dataoff 12720 
datasize 0 

otool -L build/Release/puzzle.node

build/Release/puzzle.node: 
    @rpath/puzzle.node (compatibility version 0.0.0, current version 0.0.0) 
    /opt/local/lib/libssl.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0) 
    /opt/local/lib/libcrypto.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0) 
    /opt/local/lib/libgd.2.dylib (compatibility version 3.0.0, current version 3.0.0) 
    /opt/local/lib/libpuzzle.1.dylib (compatibility version 2.0.0, current version 2.0.0) 
    /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 52.0.0) 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0) 
    /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1094.0.0) 

उत्तर

7

प्रतीक है कि dyld के बारे में शिकायत कर रहा है __Z19puzzle_init_contextP14PuzzleContext_ है। अपने असंगत रूप में, यह puzzle_init_context(PuzzleContext_*) है। मैंगलिंग इंगित करता है कि इसे संकलक द्वारा सी ++ प्रतीक माना जाता था। हालांकि, libpuzzle एक शुद्ध सी इंटरफेस निर्यात करने के लिए प्रतीत होता है। इसका मतलब है कि यह का प्रतीक_puzzle_init_context होना चाहिए। आप #include <puzzle.h> को extern "C" { … } ब्लॉक में संकलक को सूचित करने के लिए इसे ठीक कर सकते हैं ताकि हेडर की सामग्री को सी कोड के रूप में माना जाना चाहिए, इसलिए यह उचित नियमों द्वारा प्रतीक नामों को संभालेगा।

इस प्रकार की त्रुटि आमतौर पर गतिशील लिंकर द्वारा रनटाइम की बजाय स्थैतिक लिंकर द्वारा पाई जाती है। आपके त्रुटि संदेश का Expected in: dynamic lookup हिस्सा इंगित करता है कि puzzle.node-undefined dynamic_lookup से जुड़ा हुआ था। यह स्थैतिक लिंकर को अनिर्धारित प्रतीकों के लिए किसी भी त्रुटि को उत्सर्जित नहीं करने के लिए कहता है, लेकिन इसके बजाय गतिशील लिंकर रनटाइम पर प्रतीकों को हल करने का प्रयास करता है। यह शायद ही कभी व्यवहार है जो आप चाहते हैं।

+0

तो यह आपकी सिफारिश है कि मैं गतिशील रूप से जुड़े हुए होने के बजाय libpuzzle और libgd में स्थिर रूप से लिंक करता हूं? मेरा मूल विचार यह था कि उन्हें सिस्टम से गतिशील रूप से लिंक करना बेहतर था। – slf

+0

नहीं। गतिशील लिंकिंग बनाम स्थैतिक लिंकिंग का मुद्दा अब आप जो समस्या देख रहे हैं, उसके लिए ऑर्थोगनल है। '-undefined dynamic_lookup' का उपयोग करके यह नियंत्रित नहीं होता है कि आप गतिशील लिंकिंग का उपयोग कर रहे हैं, लिंकर के व्यवहार का केवल एक विशेष पहलू। सामान्य ध्वज, उस झंडे के बिना, लिंकर के लिए यह निर्धारित करने के लिए है कि कौन से डाइलीब में प्रत्येक प्रतीक शामिल हैं जो कोड से जुड़े हुए हैं।यदि कोई प्रतीक नहीं मिला है, तो एक त्रुटि उत्सर्जित होती है। '-undefined dynamic_lookup' इन त्रुटियों को दबा देता है और उम्मीद करता है कि लाइब्रेरी रनटाइम पर लोड हो जाएगी जो प्रश्नों में प्रतीकों को प्रदान करती है। – bdash

+0

@bdash आप बाहरी "सी" {...} ब्लॉक'' में #include को लपेटकर इस '' 'के बारे में अधिक बता सकते हैं। मुझे इसके साथ एक ही समस्या मिल रही है और जिस लाइब्रेरी का मैं उपयोग कर रहा हूं वह सी में भी है। –