簡體   English   中英

在C ++ for OS X中分發動態庫

[英]distributing dynamic libraries in C++ for OS X

我寫了一個關鍵取決於OpenCV的程序。 我已經從最新的穩定版本編譯了OpenCV,現在想分發這個程序,以確保人們不需要自己編譯OpenCV。 程序本身使用g ++編譯。

我嘗試了很多方法來解決這個問題:

  1. 編譯OpenCV作為靜態庫工作,但我不能靜態地將我的程序鏈接到這些庫,因為OS X中的某些庫不能靜態鏈接; 我在這里找到了這些信息: Mac OS上的混合靜態和動態鏈接

  2. 我試圖轉移到XCode,在那里我將它用作命令行項目。 我將搜索路徑以及安裝位置設置為@rpath,並添加了構建階段以將文件復制到可執行文件。 我用otool驗證了編譯后的文件是否具有正確的鏈接,但是在一台干凈的機器(沒有OpenCV庫的機器)上仍然出現故障,並且“找不到庫@rpath / libopencv ...”錯誤。 (是的,所有的mac都使用Lion,所以@rpath應該可以工作)。 這個答案在這里找到: Xcode繼續在錯誤的路徑上搜索dylib

我從runnig otool -L獲得的編譯文件和庫的結果是@rpath/libopencv_core.2.4.dylib (compatibility version 2.4.0, current version 2.4.0) /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 52.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)

那么......我做錯了什么? 我如何將這些庫與我的程序一起分發?

您應該使用框架(框架上的SO問題 )。 將您的應用程序使用的所有內容合並到一個文件夾中,然后鏈接到XCode項目中的框架。

我最近必須這樣做才能在applet中運行JavaCV。 這個命令應該完成工作:

BADPATH=/opt/local/lib  # in the case of MacPorts, change as necessary
for f in libopencv*2.4.dylib; do install_name_tool $f -id @rpath/$f \
    -add_rpath /opt/local/lib/ -add_rpath /usr/local/lib/ -add_rpath @loader_path/. \
    -change $BADPATH/libopencv_core.2.4.dylib @rpath/libopencv_core.2.4.dylib \
    -change $BADPATH/libopencv_calib3d.2.4.dylib @rpath/libopencv_calib3d.2.4.dylib \
    -change $BADPATH/libopencv_features2d.2.4.dylib @rpath/libopencv_features2d.2.4.dylib \
    -change $BADPATH/libopencv_flann.2.4.dylib @rpath/libopencv_flann.2.4.dylib \
    -change $BADPATH/libopencv_gpu.2.4.dylib @rpath/libopencv_gpu.2.4.dylib \
    -change $BADPATH/libopencv_highgui.2.4.dylib @rpath/libopencv_highgui.2.4.dylib \
    -change $BADPATH/libopencv_imgproc.2.4.dylib @rpath/libopencv_imgproc.2.4.dylib \
    -change $BADPATH/libopencv_legacy.2.4.dylib @rpath/libopencv_legacy.2.4.dylib \
    -change $BADPATH/libopencv_ml.2.4.dylib @rpath/libopencv_ml.2.4.dylib \
    -change $BADPATH/libopencv_nonfree.2.4.dylib @rpath/libopencv_nonfree.2.4.dylib \
    -change $BADPATH/libopencv_objdetect.2.4.dylib @rpath/libopencv_objdetect.2.4.dylib \
    -change $BADPATH/libopencv_photo.2.4.dylib @rpath/libopencv_photo.2.4.dylib \
    -change $BADPATH/libopencv_video.2.4.dylib @rpath/libopencv_video.2.4.dylib; done

並使用這些和所需的“-rpath”選項重新鏈接您的軟件。

暫無
暫無

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

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