我尝试从opencv-2.4.8 / apps / haarfinder编译一些文件,但是我收到以下错误:
ld: library not found for -llibtbb.dylib
注意文件名中的双l
。
我尝试按照这里的教程: http://coding-robin.de/2013/07/22/train-your-own-opencv-haar-classifier.html
在我评论的评论中:
经过许多小时的思考和环顾四周。我决定 把它作为一些文件中的拼写错误,所以我决定调查一下 opencv文件并搜索" -llibtbb"终于找到了。一世 仅将其更正为" libtbb"它终于有效了。
可悲的是,他没有提到那个档案。 我尝试过崇高的“在文件中查找”。但是我无法找到它。
其他人可以通过其他方式看一看或帮助我吗?
就像我知道libtbb.dylib
存储在哪里一样,我可以复制它并自己添加拼写错误。
请帮助,我迷路了:)
答案 0 :(得分:7)
假设libtbb.dylib
位于/usr/local/lib/libtbb.dylib
且opencv.pc
位于/usr/local/lib/pkgconfig
(位置可能因安装地点tbb
和pkg-config
而异)
然后修改/usr/local/lib/pkgconfig/opencv.pc
,将-llibtbb.dylib
更改为/usr/local/lib/libtbb.dylib
答案 1 :(得分:1)
老问题,但我需要它,或者说我找到了更好的解决方案 - 这可能有助于其他搜索者。
按照github说明中的说明操作,而不是该博客文章:https://github.com/mrnugget/opencv-haar-classifier-training
这可以纠正命令行中的拼写错误:
g++ `pkg-config --libs --cflags opencv | sed 's/libtbb\.dylib/tbb/'`\
-I. -o mergevec mergevec.cpp\
cvboost.cpp cvcommon.cpp cvsamples.cpp cvhaarclassifier.cpp\
cvhaartraining.cpp\
-lopencv_core -lopencv_calib3d -lopencv_imgproc -lopencv_highgui -lopencv_objdetect
答案 2 :(得分:1)
我在El Capitan上用自制软件安装了opencv 2.4.12和tbb,然后分别从github下载了源代码以编译mergevec,s/libtbb\.dylib/tbb/
修复它自己仍然没有帮助。< / p>
我的修复是将-L/usr/local/lib
添加到g ++参数的开头,因为默认情况下它不是在搜索我的自制文件库。我还必须添加cvsamplesoutput.cpp
,如另一个答案所述,以修复以下错误:
Undefined symbols for architecture x86_64:
"IOutput::createOutput(char const*, IOutput::OutputType)", referenced from:
JpgDatasetGenerator::JpgDatasetGenerator(char const*) in cvhaartraining-8f5a1b.o
PngDatasetGenerator::PngDatasetGenerator(char const*) in cvhaartraining-8f5a1b.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
对我有用的最后一个命令是:
g++ -L/usr/local/lib `pkg-config --libs --cflags opencv | sed 's/libtbb\.dylib/tbb/'`\
-I. -o mergevec mergevec.cpp cvboost.cpp cvcommon.cpp cvsamples.cpp\
cvhaarclassifier.cpp cvhaartraining.cpp cvsamplesoutput.cpp -lopencv_core\
-lopencv_calib3d -lopencv_imgproc -lopencv_highgui -lopencv_objdetect
答案 3 :(得分:1)
如果libtbb.dylib
文件已经存在,就像在/usr/local/lib
文件夹中的情况一样,那么您需要做的就是运行以下命令:
export DYLD_LIBRARY_PATH=/usr/local/lib
答案 4 :(得分:0)
IOutput是一个接口,其方法在ioutput.h中声明,必须在某处实现。我发现它们是在cvsamplesoutput.cpp上实现的,所以我们只需要请求gcc来编译该文件。为此,正确的命令应该是:
g++ `pkg-config --libs --cflags opencv | sed 's/libtbb\.dylib/tbb/' ` -I. -o mergevec mergevec.cpp cvboost.cpp cvcommon.cpp cvsamples.cpp cvhaarclassifier.cpp cvhaartraining.cpp cvsamplesoutput.cpp -lopencv_core -lopencv_calib3d -lopencv_imgproc -lopencv_highgui -lopencv_objdetect