OSX 10.7.5上的node-gyp-dyld:惰性符号绑定失败:未找到符号 [英] node-gyp on OSX 10.7.5 -- dyld: lazy symbol binding failed: Symbol not found

查看:126
本文介绍了OSX 10.7.5上的node-gyp-dyld:惰性符号绑定失败:未找到符号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经搜索了很多东西,而我发现与这个问题最接近的是这个(也是未回答的)问题:

I've searched quite a bit, and the closest thing I found to this same question was this (also unanswered) question:

未找到符号:_libintl_gettext

我正在尝试为libpuzzle制作一个薄的c ++包装器.

I'm attempting to make a thin c++ wrapper for libpuzzle.

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

github上的源代码

尝试构建(我已经用...缩短了路径)

Trying to build (I've hand shorted the paths with ...)

$ node-gyp clean configure build && node test.js 
gyp info it worked if it ends with ok
gyp info using node-gyp@0.8.3
gyp info using node@0.8.18 | 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

好的,所以这个错误对我来说很有意义,显然它无法加载动态库.

Ok, so this error makes sense to me, clearly it can't load a dynamic library.

起初我以为我必须调整我的binding.gyp以包括链接器设置,所以我尝试了几种不同的配置.目前,它是这样的:

At first I thought I had to adjust my binding.gyp to include the linker settings, so I tried several different configurations. At the moment this is what it looks like:

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

我在这里有库:

$ 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_FRAMEWORK_PATH和DYLD_FALLBACK_LIBRARY_PATH调整为无济于事.

I just can't figure out how to get dyld to see them. I have tried adjusting DYLD_FRAMEWORK_PATH and DYLD_FALLBACK_LIBRARY_PATH to no avail.

更新: 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)

推荐答案

dyld抱怨的符号是__Z19puzzle_init_contextP14PuzzleContext_.其为无歧义形式为puzzle_init_context(PuzzleContext_*).修饰表示编译器认为它是C ++符号.但是,libpuzzle似乎可以导出纯C接口.这意味着查找的符号是_puzzle_init_context.您可以通过将#include <puzzle.h>包装在extern "C" { … }块中以通知编译器将标头的内容视为C代码来解决此问题,因此它将按照适当的规则处理符号名称.

The symbol that dyld is complaining about is __Z19puzzle_init_contextP14PuzzleContext_. In its unmangled form, it is puzzle_init_context(PuzzleContext_*). The mangling indicates that it was considered by the compiler to be a C++ symbol. However, libpuzzle appears to export a pure C interface. This means that the symbol it should be looking for is _puzzle_init_context. You can fix this by wrapping the #include <puzzle.h> in an extern "C" { … } block to inform the compiler that the contents of the header should be treated as C code, so it will handle the symbol names by the appropriate rules.

这类错误通常是由静态链接程序检测到的,而不是由动态链接程序在运行时检测到的.错误消息的Expected in: dynamic lookup部分表明puzzle.node-undefined dynamic_lookup链接.这告诉静态链接器不要为未定义的符号发出任何错误,而是让动态链接器尝试在运行时解析符号.这很少是您想要的行为.

This sort of error is typically detected by the static linker rather than at runtime by the dynamic linker. The Expected in: dynamic lookup portion of your error message indicates that puzzle.node was linked with -undefined dynamic_lookup. This tells the static linker not to emit any errors for undefined symbols, but instead to have the dynamic linker attempt to resolve the symbols at runtime. This is rarely the behavior you want.

这篇关于OSX 10.7.5上的node-gyp-dyld:惰性符号绑定失败:未找到符号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆