簡體   English   中英

在Mac中加載動態庫路徑錯誤

[英]loading dynamic library path error in mac

我現在正在構建一個動態庫和一個使用該動態庫的命令行插圖程序。 庫和插圖程序位於同一文件夾中:

/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_toolmanpage )在構建后進行。 您需要使用(類似)將新路徑設置為@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片段)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM