我正在尝试使用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
,否则无需向其添加pkgconfig
或buildInputs
之外的任何内容。
在冗长的opencv重建之后,构建并运行以上代码即可(给出lena.jpg
):
关于c++ - 如何使OpenCV在nix中工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40667313/