【发布时间】:2018-04-22 00:10:53
【问题描述】:
我试图弄清楚如何在没有和 ide 的情况下在命令行上编译东西。这是我第一次使用命令行构建项目。而且,我在链接一个简单项目上的依赖项时遇到了麻烦。
我有这个树结构:
.
├── 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;
}
在我的 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
这些天我一直在搞砸,我似乎无法弄清楚。当可执行文件需要这些定义时,它如何找到要链接的东西?
【问题讨论】:
标签: c++ macos linker-errors clang++ dylib