未找到 Opencv 的 gcc 编译错误 cv.h

Posted

技术标签:

【中文标题】未找到 Opencv 的 gcc 编译错误 cv.h【英文标题】:gcc compile error cv.h not found for Opencv 【发布时间】:2012-09-17 22:53:41 【问题描述】:

每次我尝试编译示例程序时,我都会得到 cv.h not found, highgui.c not found。我尝试转到opencv中的includes文件夹,并做了一个sudo copy * to usr/includes,但没有多大帮助:我得到以下输出有人可以告诉我我做错了什么吗?

stream_server.c:19:25: fatal error: /usr/include/highgui.h: Permission denied
compilation terminated.
uc@uc-HP-Pavilion-dv6-Notebook-PC:~/Desktop$ sudo gcc stream_server.c -o streamserver
stream_server.c: In function ‘quit’:
stream_server.c:174:5: warning: format not a string literal and no format arguments [-Wformat-security]
stream_server.c:177:5: warning: format not a string literal and no format arguments [-Wformat-security]
/tmp/ccVnjC7y.o: In function `cvDecRefData':
stream_server.c:(.text+0xa9a): undefined reference to `cvFree_'
stream_server.c:(.text+0xb22): undefined reference to `cvFree_'
/tmp/ccVnjC7y.o: In function `cvGetRow':
stream_server.c:(.text+0xc39): undefined reference to `cvGetRows'
/tmp/ccVnjC7y.o: In function `cvGetCol':

【问题讨论】:

这个文件是怎么回事? /usr/include/highgui.h cat /usr/include/highgui.h 输出什么?你真的有权限阅读吗? cat /user/include/highgui.h 说权限被拒绝,但这不应该是问题,因为我在我的 c 程序上在 gcc 之前做了一个 sudo 我不确定我是否复制了正确的文件,我只从opencv中的include文件夹复制了我没有复制opencv2 【参考方案1】:

您遇到的第一个问题是您显然安装了一些没有正确权限的文件。由于您似乎可以使用sudo,因此您可能需要修复文件的权限:

sudo chmod a+r /usr/include/highgui.h

(类似于您没有读取权限的其他文件)。

另一个问题表明您的代码要编译但不能链接。这很可能是因为您要么完全错过了库名称,要么将其放在错误的位置:确保使用 -lhighgui -lcvaux -lcxcore(这是我从文档中收集到的;我自己没有使用过这个库)在您提供的任何翻译单元之后(例如,在stream_server.c 之后;这看起来有点像 C 文件,暗示操作中的语言标签错误)。

【讨论】:

它仍然给我一个错误,例如警告:不推荐使用从 stream.cpp:36:31:warning: string constant to char* [-Wwrite-strings] 和 stream.cpp:79:37 的转换:警告:stream.cpp 已弃用从字符串常量到 char* [-Wwrite-strings] 和 stream.cpp:111:30 的转换:警告:从 'const void' 到 'const sockaddr*' 的无效转换 [-fpermissive] 这些不是错误,而是警告。第一个说您使用的是char* x = "..."; 之类的东西,而类型应该是char const*。另一个警告似乎不正确:您需要显示相应的代码才能解决这个问题。 stream.cpp:在函数 'void* streamServer(void*)':stream.cpp:111:62:错误:从 'const void*' 到 'const sockaddr*' 的无效转换 [- fpermissive] /usr/include/x86_64-linux-gnu/sys/socket.h:115:12: 错误:初始化'int bind(int, const sockaddr*, socklen_t)' [-fpermissive] stream.cpp 的参数 2: 112:28:警告:不推荐将字符串常量转换为 'char*' [-Wwrite-strings] stream.cpp:在函数 'void quit(char*, int)' 中:stream.cpp:164:45:警告:格式不是字符串文字,也没有格式参数 [-Wformat-security] 我也遇到了同样的问题,我们必须将哪些文件复制到用户/包含。 此错误看起来有点像您尝试使用 C++ 编译器编译 C 代码。您需要将 void const* 作为 bind() 的第二个参数转换为正确的类型: reinterpret_cast(p)` (我不知道如何在您的代码中调用该参数,当然)。

以上是关于未找到 Opencv 的 gcc 编译错误 cv.h的主要内容,如果未能解决你的问题,请参考以下文章

gcc 编译器 lib 文件未找到错误

Opencv '未定义的对 `cv::namedWindow....' 的引用(链接错误)

未找到 cv2.imread 标志

架构 arm64 的未定义符号:“cv::String::deallocate()”

CMAKE未定义引用'cv :: fastFree(void *)错误的OpenCV Android实现

opencv tesseract 未定义的引用错误