未找到 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以上是关于未找到 Opencv 的 gcc 编译错误 cv.h的主要内容,如果未能解决你的问题,请参考以下文章
Opencv '未定义的对 `cv::namedWindow....' 的引用(链接错误)
架构 arm64 的未定义符号:“cv::String::deallocate()”