在 Mac 中加载动态库路径错误

loading dynamic library path error in mac

本文关键字:路径 错误 动态 加载 Mac      更新时间:2023-10-16

我现在正在构建一个动态库和一个使用此动态库的命令行插图程序。库和插图程序位于同一文件夹中:

/user/xxx/develop/debug/libdynamic.dylib
/user/xxx/develop/debug/illustration
当插图程序

在我的计算机中运行良好时,我将插图程序以及动态库发送给我的同事,他将在他的计算机中运行插图程序。但是,每次他在命令窗口中运行插图程序时,该程序还会提醒它无法加载libdynamic.dylib,因为它试图在/user/xxx/develop/debug/中找到库,这在我同事的计算机上不可用。我在想我应该怎么做。非常感谢。

编辑:使用 otool 进行插图程序的输出如下:

 /Users/xxx/develop/debug/libdynamic.dylib (compatibility version 0.0.0, current version 0.0.0)
    /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 744.18.0)
    /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 56.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
你需要

告诉illustration在哪里可以找到libdynamic.dylib你可以使用install_name_tool(manpage(进行后期构建。您需要将新路径设置为 @executable_path/libdynamic.dylib ,如下所示:

$ install_name_tool -change /user/xxx/develop/debug/libdynamic.dylib 
  @executable_path/libdynamic.dylib 
  /user/xxx/develop/debug/illustration

(要传递给install_name_tool的确切旧名称值将取决于它当前设置的内容,可以使用 otool -L /user/xxx/develop/debug/illustration 确定(。

避免这种废话(以及我自己的做法(的一种方法是使用 -install_name 链接器选项:

$(BINDIR)/libdynamic.dylib: $(OBJS)
    $(CXX) -dynamiclib -current_version $(MAJOR_MINOR_VERSION) 
        -compatibility_version $(MAJOR_MINOR_VERSION) 
        -install_name @executable_path/libdynamic.dylib 
        $(LDFLAGS) -o $@ $(OBJS) $(LIBS)

(Makefile片段取自此处(。