1

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

/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)
4

1 回答 1

1

您需要告诉illustration在哪里libdynamic.dylib可以使用install_name_tool手册页)进行后期构建。您需要将新路径设置为@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片段取自这里)。

于 2013-10-09T10:20:06.437 回答