dyld:在 swift 中尝试静态 link dylib 时惰性符号绑定失败
dyld: lazy symbol binding failed when trying to static link a dylib in swift
我在 freepascal 中使用 fpcupdeluxe 构建了一个 dylib 文件,只有一个 cdecl _test 函数暴露在两者上
1) 苹果操作系统和
2) Debian (交叉编译为 x86_64 darwin)
我尝试调用 dylib 使用
1) 开门
2) 桥接头
3) 框架
在 MacOS 上编译的 dylib 适用于所有 3 种方法。但是,当我用我在 debian 上交叉编译的那个 dylib 替换那个 dylib 时,似乎只有 dlopen 有效,其他两种使用桥接头和框架的方法给了我这个错误:
dyld:惰性符号绑定失败:找不到符号:_test
我在两个 dylib 上都执行了 nm -gU,只是 _test 函数的相对虚拟地址不同,我该如何调查这个问题的原因并解决它?
otool -L 用于
不工作
XXXXX.dylib:
/home/wire/fpcupdeluxe/projects/XXXXX.dylib(兼容版本0.0.0,当前版本0.0.0)
/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit(兼容版本45.0.0,当前版本1404.0.0)
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation(兼容版本300.0.0,当前版本1252.0.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation(兼容版本150.0.0,当前版本1253.0.0)
/usr/lib/libSystem.B.dylib(兼容版本1.0.0,当前版本1225.1.1)
工作
/Users/wire/XXXXX.dylib:
/Users/wire/XXXXX.dylib(兼容版本0.0.0,当前版本0.0.0)
/usr/lib/libSystem.B.dylib(兼容版本1.0.0,当前版本1281.100.1)
其中 XXXXX 是我的库名称,我还注意到工作和非工作的路径不同。在非工作目录中,我的 dylib 指向我的 linux machine 上的目录,该目录不应出现在 mac 上。我也试过在 windows 上交叉编译,路径在 C:\ 中,错误是找不到图像,我是否必须更改该路径?我是 MacOS 编程新手
感谢 Kamil.S,我找到了解决方案,我只需要 运行 install_name_tool -id @rpath/ 将其设置为相对路径,因为不像 [=14] =] 动态库的所有路径都存储在 mach-o 结构本身中
我在 freepascal 中使用 fpcupdeluxe 构建了一个 dylib 文件,只有一个 cdecl _test 函数暴露在两者上 1) 苹果操作系统和 2) Debian (交叉编译为 x86_64 darwin)
我尝试调用 dylib 使用 1) 开门 2) 桥接头 3) 框架
在 MacOS 上编译的 dylib 适用于所有 3 种方法。但是,当我用我在 debian 上交叉编译的那个 dylib 替换那个 dylib 时,似乎只有 dlopen 有效,其他两种使用桥接头和框架的方法给了我这个错误: dyld:惰性符号绑定失败:找不到符号:_test
我在两个 dylib 上都执行了 nm -gU,只是 _test 函数的相对虚拟地址不同,我该如何调查这个问题的原因并解决它?
otool -L 用于
不工作
XXXXX.dylib: /home/wire/fpcupdeluxe/projects/XXXXX.dylib(兼容版本0.0.0,当前版本0.0.0) /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit(兼容版本45.0.0,当前版本1404.0.0) /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation(兼容版本300.0.0,当前版本1252.0.0) /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation(兼容版本150.0.0,当前版本1253.0.0) /usr/lib/libSystem.B.dylib(兼容版本1.0.0,当前版本1225.1.1)
工作
/Users/wire/XXXXX.dylib: /Users/wire/XXXXX.dylib(兼容版本0.0.0,当前版本0.0.0) /usr/lib/libSystem.B.dylib(兼容版本1.0.0,当前版本1281.100.1)
其中 XXXXX 是我的库名称,我还注意到工作和非工作的路径不同。在非工作目录中,我的 dylib 指向我的 linux machine 上的目录,该目录不应出现在 mac 上。我也试过在 windows 上交叉编译,路径在 C:\ 中,错误是找不到图像,我是否必须更改该路径?我是 MacOS 编程新手
感谢 Kamil.S,我找到了解决方案,我只需要 运行 install_name_tool -id @rpath/ 将其设置为相对路径,因为不像 [=14] =] 动态库的所有路径都存储在 mach-o 结构本身中