我正在尝试使用nix软件包管理器来使OpenCV hello world程序正常工作,但它会喷出错误:



我使用以下default.nix文件创建了一个nix-shell

with import <nixpkgs> {}; {
  cimgEnv = stdenv.mkDerivation {
  name = "cimgdev";
  buildInputs = [ pkgconfig stdenv cimg xorg.libX11 boost opencv gnome.gtk ];
  };
}

编译并运行以下代码
#include <iostream>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

int main() {

  Mat image;

  image = imread("lena.jpg", 1);

  if ( !image.data ) {
    cout << "No image data" << endl;
    return -1;
  }

  namedWindow("Display Image", WINDOW_AUTOSIZE);
  imshow("Display Image", image);

  waitKey(0);

  return 0;
}

使用以下命令
g++ `pkg-config --cflags opencv` opencvtest.cpp `pkg-config --libs opencv` -o opencvtest

它可以编译,但是如果我尝试运行它,则会收到上一条错误消息。

我尝试了CMake,结果还是一样。

最佳答案

OpenCV是在没有GTK支持的情况下构建的。在opencv package definition中,enableGtk2默认为false。要启用它,请覆盖default.nix中的参数:let opencvGtk = opencv.override (old : { enableGtk2 = true; });in ... buildInputs = [... opencvGtk ...]; ...
除非您想直接使用gtk2,否则无需向其添加pkgconfigbuildInputs之外的任何内容。
在冗长的opencv重建之后,构建并运行以上代码即可(给出lena.jpg):

c&#43;&#43; - 如何使OpenCV在nix中工作?-LMLPHP

关于c++ - 如何使OpenCV在nix中工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40667313/

10-11 22:42
查看更多