【发布时间】:2015-10-19 21:52:38
【问题描述】:
我正在使用 OpenCV 从网络摄像头录制视频。我使用 Xcode 6.4 编写了一个(C++)代码来在 OS X Yosemite 10.10.4 上录制视频。当我从 Xcode 编译和运行它时,它工作得非常好,但是当我想从终端编译(使用 g++ -o main main.cpp)它时,它会生成以下错误:
Undefined symbols for architecture x86_64:
"cv::VideoWriter::write(cv::Mat const&)", referenced from:
_main in main-027833.o
"cv::VideoWriter::VideoWriter(cv::String const&, int, double, cv::Size_<int>, bool)", referenced from:
_main in main-027833.o
"cv::VideoWriter::~VideoWriter()", referenced from:
_main in main-027833.o
"cv::VideoCapture::VideoCapture(int)", referenced from:
_main in main-027833.o
"cv::VideoCapture::~VideoCapture()", referenced from:
_main in main-027833.o
"cv::VideoCapture::operator>>(cv::Mat&)", referenced from:
_main in main-027833.o
"cv::Mat::deallocate()", referenced from:
cv::Mat::release() in main-027833.o
"cv::String::deallocate()", referenced from:
cv::String::~String() in main-027833.o
"cv::String::allocate(unsigned long)", referenced from:
cv::String::String(char const*) in main-027833.o
"cv::imshow(cv::String const&, cv::_InputArray const&)", referenced from:
_main in main-027833.o
"cv::waitKey(int)", referenced from:
_main in main-027833.o
"cv::fastFree(void*)", referenced from:
cv::Mat::~Mat() in main-027833.o
"cv::VideoCapture::get(int) const", referenced from:
_main in main-027833.o
"cv::VideoCapture::isOpened() const", referenced from:
_main in main-027833.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command fail
ed with exit code 1 (use -v to see invocation)
我知道它是因为它无法链接 OpenCV 库。我尝试使用“vi
$HOME/.bash_profile" 然后设置路径
"export PATH=$PATH:/usr/local/include"
和
"export PATH=$PATH:/user/local/lib"
但这无济于事。我也试过了
g++ -o main main.cpp -l `pkg-config opencv --cflags --libs`
但没有用。 我不知道如何指定路径。任何帮助,将不胜感激。 谢谢!
【问题讨论】:
-
感谢您的回复!不,不是,因为我所有的问题都与 OpenCV 链接错误有关。我从终端编译了一个 C++“hello world”程序,它工作正常,但是当我编译包含 OpenCV 函数的代码时,它会生成上述指定的错误。
-
再次感谢您的回复。是的,我愿意。正如我在使用 Xcode 编译时在问题中提到的那样,它工作得非常好,这意味着我按照您提到的问题/答案中的指定正确添加了所有库路径。唯一的问题是我不知道如何在从终端编译时添加该库路径。我现在尝试了这个:“g++ -o main main.cpp -l /usr/local/lib”,但最终出现以下错误“ld: library not found for -l/usr/local/lib clang: error: linker command退出代码 1 失败(使用 -v 查看调用)"
-
它必须是一个大写的
-L,它指定库所在的文件夹以及一个小写的-lname_of_library,它告诉链接器链接到这个特定的库