gpt4 book ai didi

c++ - OSX 10.7.5 上的 node-gyp -- dyld : lazy symbol binding failed: Symbol not found

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:28:04 24 4
gpt4 key购买 nike

我搜索了很多,我发现最接近同一个问题的是这个(也是未回答的)问题:

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 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

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

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

{
"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去看他们。我试过调整 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)

最佳答案

dyld 提示的符号是__Z19puzzle_init_contextP14PuzzleContext_ .在其未损坏的形式中,它是 puzzle_init_context(PuzzleContext_*) .改编表明编译器认为它是 C++ 符号。但是,libpuzzle 似乎导出纯 C 接口(interface)。这意味着它应该寻找的符号是_puzzle_init_context。 .您可以通过包装 #include <puzzle.h> 来解决此问题在extern "C" { … } block 通知编译器 header 的内容应被视为 C 代码,因此它将按照适当的规则处理符号名称。

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

关于c++ - OSX 10.7.5 上的 node-gyp -- dyld : lazy symbol binding failed: Symbol not found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14630044/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com