ld:找不到-llibtbb.dylib的库

时间:2014-04-29 11:41:28

标签: opencv

我尝试从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存储在哪里一样,我可以复制它并自己添加拼写错误。

请帮助,我迷路了:)

5 个答案:

答案 0 :(得分:7)

假设libtbb.dylib位于/usr/local/lib/libtbb.dylibopencv.pc位于/usr/local/lib/pkgconfig(位置可能因安装地点tbbpkg-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