2017-11-09 2 views
-1

私はコマンドラインでaとideを使わずにコンパイルする方法を理解しようとしています。これはコマンドラインを使ってプロジェクトをビルドした初めてのことです。そして、シンプルなプロジェクトに依存関係をリンクすることに苦しんでいます。Mac OS Xのコマンドラインでdylibと実行可能ファイルをリンクするにはどうしたらいいですか?

私はこの木の構造を有する:

. 
├── include 
... 
... 
├── lib 
│   ├── libopencv_calib3d.3.3.1.dylib 
│   ├── libopencv_core.3.3.1.dylib 
│   ├── libopencv_cudev.3.3.1.dylib 
│   ├── libopencv_features2d.3.3.1.dylib 
│   ├── libopencv_flann.3.3.1.dylib 
│   ├── libopencv_highgui.3.3.1.dylib 
│   ├── libopencv_imgcodecs.3.3.1.dylib 
│   ├── libopencv_imgproc.3.3.1.dylib 
│   ├── libopencv_videoio.3.3.1.dylib 
│   ├── libopencv_ximgproc.3.3.1\ 2.dylib 
│   └── libopencv_ximgproc.3.3.1.dylib 
├── resources 
│   ├── giraffe.jpg 
│   ├── golden-retriver-puppy.jpg 
│   ├── kangaroo.jpg 
│   └── kitty.jpeg 
└── sources 
    └── main.cpp 

と私がメインでこのコードを持っている:

#include "opencv2/ximgproc/segmentation.hpp" 
#include "opencv2/highgui.hpp" 
#include "opencv2/core.hpp" 
#include "opencv2/imgproc.hpp" 
#include <iostream> 
#include <ctime> 

static void help() { 
    std::cout << std::endl << 
    "Usage:" << std::endl << 
    "./ssearch input_image (f|q)" << std::endl << 
    "f=fast, q=quality" << std::endl << 
    "Use l to display less rects, m to display more rects, q to quit" << std::endl; 
} 


int main(int argc, char** argv) { 
    std::cout << "Test" << std::endl; 
    // If image path and f/q is not passed as command 
    // line arguments, quit and display help message 
    if (argc < 3) { 
     help(); 
     return -1; 
    } 

    return 0; 
} 

をし、どこでもMy Macターミナルで私は、このコマンドを使って構築された:

clang++ sources/main.cpp -o a -I./include -L./lib -lopencv_core.3.3.1 -lopencv_ximgproc.3.3.1 -lopencv_highgui.3.3.1 -lopencv_imgproc.3.3.1 -lopencv_imgcodecs.3.3.1 

これは私に何かエラーを与えません。

が、私は、私は次のエラーを取得~$ ./a

を実行すると:

dyld: Library not loaded: @rpath/libopencv_core.3.3.dylib 
    Referenced from: 
    /Users/lgdelacruz/Documents/GSoC/project/objectdetection/./a 
    Reason: image not found 
Abort trap: 6 

を私は日のためにこれらをいじってきた、と私はそれを把握するように見えることはできません。実行可能ファイルは、それらの定義が必要なときにリンクするものをどのように見つけるか?

答えて

1

あなたは、動的に両方のライブラリを見つける時間実行時間をコンパイルするためにシステムに指示する必要があなたのコードをコンパイルするためのライブラリをリンクしています。

今のところ、-Lで指定されたパスでライブラリからコンパイルするようコンパイラに指示するだけで、実行時にライブラリを見つける場所をシステムに知らせることはありません。

あなたはおそらくこれが必要:あなたのライブラリがどこにあるか

export DYLD_LIBRARY_PATH=./lib:$DYLD_LIBRARY_PATH 

./libを示しています。

関連する問題