更新到 Xcode 15 后动态链接器无法在运行时找到符号

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

升级到 Xcode 15 后,我在运行时链接动态库时遇到问题。我使用 cmake 从源代码编译了 netcdf-c 并将其安装在

/usr/local

考虑简单的测试程序。

#import <netcdf.h>

int main() {
    nc_strerror(0);
}

我可以使用以下命令构建并链接它。

clang -o test main.c -lnetcdf -L/usr/local/lib

一切编译正常,但运行时出现运行时错误。

% ./test 
dyld[67988]: Symbol not found: _nc_strerror
  Referenced from: <31EE4C15-A028-32F2-8524-123CC396EB82> /Users/***/Desktop/test/test
  Expected in:     <no uuid> unknown
zsh: abort      ./test

我可以确认该符号存在于

libnetcdf.dylib
中。

 % nm libnetcdf.dylib| grep _nc_strerror
0000000000006070 T _nc_strerror

我不明白为什么没有加载这个符号。我唯一可以猜测的是,它与构建 HDF5 库时需要禁用

CMAKE_SKIP_RPATH
有关,因为我在 szip 库中遇到了
@rpath
错误。

% make
[  0%] Building C object src/CMakeFiles/H5detect.dir/H5detect.c.o
[  0%] Linking C executable ../bin/H5detect
[  0%] Built target H5detect
[  0%] Building C object src/CMakeFiles/H5make_libsettings.dir/H5make_libsettings.c.o
[  0%] Linking C executable ../bin/H5make_libsettings
[  0%] Built target H5make_libsettings
[  0%] Create H5lib_settings.c
dyld[69160]: Library not loaded: @rpath/libszip.2.1.dylib
  Referenced from: <893565BE-D306-3437-AA9A-67027F43FC49> /Users/***/Libraries/hdf5-1.14.2/build/bin/H5make_libsettings
  Reason: tried: '/Users/***/Libraries/hdf5-1.14.2/build/lib/libszip.2.1.dylib' (no such file), '/Users/***/Libraries/hdf5-1.14.2/build/bin/libszip.2.1.dylib' (no such file), '/Users/***/Libraries/hdf5-1.14.2/build/bin/../lib/libszip.2.1.dylib' (no such file), '/Users/***/Libraries/hdf5-1.14.2/build/bin/libszip.2.1.dylib' (no such file), '/Users/***/Libraries/hdf5-1.14.2/build/lib/libszip.2.1.dylib' (no such file), '/Users/***/Libraries/hdf5-1.14.2/build/bin/libszip.2.1.dylib' (no such file), '/Users/***/Libraries/hdf5-1.14.2/build/bin/../lib/libszip.2.1.dylib' (no such file), '/Users/***/Libraries/hdf5-1.14.2/build/bin/libszip.2.1.dylib' (no such file)
/bin/sh: line 1: 69160 Abort trap: 6           /Users/***/Libraries/hdf5-1.14.2/build/bin/H5make_libsettings H5lib_settings.c
make[2]: *** [src/gen_SRCS.stamp2] Error 134
make[1]: *** [src/CMakeFiles/gen_hdf5-static.dir/all] Error 2
make: *** [all] Error 2

我还使用 cmake 从源代码构建 szip 库并将其安装在

/usr/local/lib

cmake hdf5 netcdf rpath xcode15
1个回答
0
投票

他们有一个新的链接器,这可能是问题所在。也许 Xcode 发行说明中的内容可以提供帮助? “编写了一个新的链接器,可以显着加快静态链接速度。它是所有 macOS、iOS、tvOS 和 VisionOS 二进制文件以及任何使用“可合并库”功能的人的默认链接器。仍然可以使用 -ld64 显式请求经典链接器,并且将在未来版本中删除。”

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