升级Xcode 15后动态链接器运行时无法找到符号
升级Xcode 15后动态库运行时链接问题
我通过cmake从源码编译netcdf-c并安装在/usr/local目录,升级Xcode 15后遇到动态库运行时链接错误。
测试程序
#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编译问题
猜测该问题可能与HDF5编译时的CMAKE_SKIP_RPATH设置有关,此前编译HDF5时曾遇到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
注:szip库同样是通过cmake从源码编译并安装在/usr/local/lib目录。
内容的提问来源于stack exchange,提问作者user1139069
相关产品推荐
相关产品推荐

