【问题标题】:Can't compile c++ file from terminal [duplicate]无法从终端编译c ++文件[重复]
【发布时间】: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,它告诉链接器链接到这个特定的库

标签: c++ xcode macos opencv


【解决方案1】:

终于,经过 3 天的挫折,我找到了解决方案。我正在为同样遇到同样问题的人分享。

您所要做的就是在从终端编译代码时添加您在 Xcode“其他链接器标志”中添加的所有标志。所以这是对我有用的命令。

g++ main.cpp -o main -I/usr/local/include -L/usr/local/lib -lopencv_core -lopencv_calib3d -lopencv_videoio -lopencv_video -lopencv_videostab -lopencv_highgui

我没有包含所有标记,因为我只处理视频,但您可能需要添加更多或更少,具体取决于您正在处理的内容。

【讨论】:

    猜你喜欢
    • 2015-02-16
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多