

他のPCからディレクトリごとXcodeのプロジェクトを移動させ，新しいPCで実行しようとした際に，おそらくライブラリのリンクの問題なのですが，実行できずに困っています．そのプロジェクトでは，OpenCVなどをはじめとする複数のライブラリを使用しています．

インストール方法やそれぞれのバージョンは異なる場合もあるのですが（今以前のバージョンをインストールしようとするとうまくいかない場合があった），使用している全てのライブラリについて，

  * Library search pathの設定．
  * Header search pathの設定．
  * Build Phase内のLink Binary with Librariesで必要な.dylibファイルのリンクづけ

を行いました．  
すると，ビルド自体は成功する（build succeededと表示される）のですが，

[code]

    dyld: Library not loaded: /Users/XXX/XXX/ArUco/aruco-1.3.0/build/src/libaruco.1.3.dylib
      Referenced from: /Users/○○○/○○○/Xcode/build/Debug/feedback
      Reason: image not found
    Program ended with exit code: 9
    
[/code]

上記のようなメッセージとともにプログラムは終了してしまいます．

XXXや○○○は実際はそのような名前ではありませんがユーザ名などですので変更しています．  
ライブラリが読み込めていない，ということは理解できるのですが，`"Library not loaded:
"`の先にあるパス（/Users/XXX/XXX...）は，移動元のPCのパスであり，今実行しているPCにそのようなディレクトリ，ファイルはありません．

`"Reference from:
"`の先に表示されているのは，ビルド時に作成されるUNIX実行ファイルです．一度このファイルを削除して実行しても同様のメッセージが表示されますので，どこかに以前のPCにおけるパスの設定が残っていると考えられます．

XcodeのBuild setting内のLibrary search path，Header search
pathに前のPCの設定が残っていることはありません．ですが，他にパスを設定できるようなところは見当たらず困っています．何かご存知の方がいらっしゃいましたら教えていただければ幸いです．

  * PC: Macbook PRO 2017
  * OS: macOS 10.14
  * Xcode 10.1

ライブラリはhomebrew経由でインストール．(GLFW, GLEW, tbbなど)  
opencvのみhomebrewで最新版をインストールすると上記のものとは違うエラーを吐くので，opencv3.2のソースをダウンロードし，cmakeでインストールしました．

よろしくお願いいたします．


CC BY-SA 4.0
2018-11-01T02:43:52.187
49839
2020-04-26T08:18:39.040
2020-04-26T08:18:39.040
32986
13125
question
xcode macos opencv homebrew
Xcodeにおけるライブラリのリンクについて


unix実行ファイル`feedback`の構成要素に
`.dylib`が含まれていて、その`.dylib`が前のMacでコンパイルしたものをコピーしただけではありませんか？

構成要素がわからないので100%とは言えませんが、ライブラリファイルをアーカイバーで作成する場合、

  * `.a`という拡張子の静的ライブラリ：リンク時に内容がコピーされるため、他のマシンにコピーしても実行出来る
  * `.dylib`という拡張子の動的ライブラリ：リンク時にファイルパスだけが実行ファイルに保存され、起動時、またはロード命令時に実行ファイルに読み込まれるため、実行ファイルのサイズが小さくなるが、他のマシンにコピーすると、中で使われている`.dylib`が再帰的におなじ場所にないとエラーになる

起きている現象から見るに、`feedback`というプログラムがなにがしかの`.dylib`をリンクしていて、その`.dylib`またはその`.dylib`が必要としている他の`.dylib`が新しいマシンに存在しない。ことが推定されます。

もしそうでしたら、これを回避するには、`feedback`を構成する要素のライブラリを`.dylib`ではなく｀.a`にするか、その`.dylib`を新しいマシンでコンパイルし直したものに置き換えるとこのエラーは出なくなると思います。

つまり  
`feedback`<\- ある、コンパイル出来る  
└─`????.dylib`<\- ある、前のマシンからコピー  
└─`XXXX.dylib`<\- 前のマシンにしかないので見つからないとエラー  
ということが起きている様な気がします。ご確認下さい。


CC BY-SA 4.0
2018-11-01T13:06:55.157
49865
2018-11-01T13:06:55.157
14745
49839
answer