使用为 Linux 平台编写的 Makefile 时出现 MacOS 动态库问题

问题描述 投票:0回答:1

我必须构建一个在 Linux 上编写的 Geant4 代码,并且必须使其在 MacOS 上运行。问题是代码需要一个自定义库(libTvectors),我确实有并且正在编译。然而,它似乎创建了扩展名为 .so 的库,但 Geant4 程序请求 .dylib。

当我使用 makefile 构建程序时出现此警告:

ld:警告:dylib (../Tvectors/libTvectors.so) 是为比链接版本 (13.0) 更新的 macOS 版本 (13.5) 构建的

当我启动可执行文件时,出现此错误:

库未加载:/Users/cristinaclisu/Work/nucsim_short/Tvectors/ 引用自:<90602448-3E34-3328-9F82-F64FA34D4933> /Users/cristinaclisu/Work/nucsim_short/build/nucsim 原因:尝试:'/usr/local/Cellar/root/6.28.04_1/lib/root/'(不是文件),'/Users/cristinaclisu/Work/nucsim_short/Tvectors/'(不是文件),'/ System/Volumes/Preboot/Cryptexes/OS/Users/cristinaclisu/Work/nucsim_short/Tvectors/'(没有这样的文件),'/Users/cristinaclisu/Work/nucsim_short/Tvectors/'(不是文件),'/usr/ local/lib/'(不是文件),'/usr/lib/'(不是文件,不在 dyld 缓存中) 中止陷阱:6

有人可以帮我弄清楚我应该做什么来解决这个问题吗? 有没有办法让 libTvectors 创建为 dylib? 有什么方法可以告诉我的 Geant4 程序寻找 .so 吗? 或者这是我遗漏的另一个问题?

已成功安装 Root(libTvectors 所需)。经过测试并有效。 已成功安装 Geant4(应用程序所需)。经过测试并有效。 编译了libTvectors库。 make后没有错误。 编译了 Geant4 应用程序,除了警告之外没有任何错误。

尝试执行该程序时,出现上述错误。

macos shared-libraries dylib geant4
1个回答
0
投票

简短的故事是,dylib 嵌入了它们期望安装的路径,并且该路径被复制到在链接时链接到它们的二进制文件中。这条路对你的

libTvectors.so
来说已经断了。

快速修复应该是运行这两个命令:

install_name_tool -id /Users/cristinaclisu/Work/nucsim_short/Tvectors/libTvectors.so /Users/cristinaclisu/Work/nucsim_short/Tvectors/libTvectors.so
codesign -f -s - /Users/cristinaclisu/Work/nucsim_short/Tvectors/libTvectors.so

然后重建任何与

libTvectors.so
链接的内容。

请注意,如果您决定将项目文件夹移动到其他路径,您的设置将会中断。要更全面地了解安装名称以及如何处理它们,请参阅我的另一个答案

© www.soinside.com 2019 - 2024. All rights reserved.