当前位置:  技术问答>linux和unix

[新人问题]关于include .c 和 include .h

    来源: 互联网  发布时间:2016-06-17

    本文导语:  本帖最后由 xxxxxtt 于 2009-07-15 17:28:21 编辑 spcaview.c是一个摄像头采集程序 1:gcc编译: gcc -o spcaview spcaview.c -I/usr/local/include/SDL -SDL 错误如下: spcaview.c:(.text+0x568): undefined reference to `AVI_open_output_file' spcaview.c:(.text...

本帖最后由 xxxxxtt 于 2009-07-15 17:28:21 编辑
spcaview.c是一个摄像头采集程序

1:gcc编译:
gcc -o spcaview spcaview.c -I/usr/local/include/SDL -SDL
错误如下:
spcaview.c:(.text+0x568): undefined reference to `AVI_open_output_file'
spcaview.c:(.text+0x5ba): undefined reference to `AVI_set_video'
spcaview.c:(.text+0x6dc): undefined reference to `AVI_write_frame'
spcaview.c:(.text+0x7f0): undefined reference to `AVI_close'
然后我打开spcaview.c
把#include "avilib.h" 改成 #include "avilib.c" (spcaview.c目录下有文件avilib.h 和 avilib.c)
编译通过,程序运行正常。

2:同样是该spcaview.c
用g++ 编译
g++  -o spcaview spcaview.c -I/usr/local/include/SDL -SDL  
错误如下:
spcaview.c:218: 错误: 从类型 ‘unsigned char*’ 到类型 ‘char*’ 的转换无效
spcaview.c:218: 错误:   初始化实参 2,属于 ‘int AVI_write_frame(avi_t*, char*, long int)’
spcaview.c:222: 错误: 从类型 ‘void*’ 到类型 ‘unsigned char*’ 的转换无效
spcaview.c: In function ‘void refresh_screen(unsigned char*, unsigned char*, int, int, int, int, int, int, int)’:
spcaview.c:263: 错误: 从类型 ‘void*’ 到类型 ‘unsigned char*’ 的转换无效

然后我打开spcaview.c
把#include "avilib.h" 改成 #include "avilib.c" 
错误更多


问题:1. spcaview.c用gcc 编译,#include "avilib.h" 有问题,而#include "avilib.c"却可以?
          2.用g++ 编译产生的 类型转换无效,怎么解决?(因为用gcc 没问题,所以我不认为是spcaview.c有问题)
          3.把#include "avilib.h"改成"avilib.c"之后,为什么gcc编译通过,而g++却错误一大堆?C++兼容C,编译器也应该是兼容的呀。。






|
1. AVI_open_output_file 等函数的实现在 avilib.c 中, 所以。。
2. g++ 的类型转换要求更严格
3.  还是类型检查的问题。

解决办法:

gcc -c -o spcaview.o spcaview.c -I/usr/local/include/SDL -SDL
gcc -c -o avilib.o avilib.c -I/usr/local/include/SDL -SDL
gcc -o spcaview.o avilib.o spcaview

|
"1. spcaview.c用gcc 编译,#include "avilib.h" 有问题,而#include "avilib.c"却可以? "

是因为avilib.h只有函说明,而avilib.c才有函数体,一个可以这样包涵,还有个就是用Makefile编译连接起来

"2.用g++ 编译产生的 类型转换无效,怎么解决?(因为用gcc 没问题,所以我不认为是spcaview.c有问题) "
是因为g++对语法严格检查,解决办法是找到具体的位置,加上变量类型强行转换应该可以了

"3.把#include "avilib.h"改成"avilib.c"之后,为什么gcc编译通过,而g++却错误一大堆?C++兼容C,编译器也应该是兼容的呀。。 "
应该是兼容,只是gcc自动转换了,而g++没有自动转换

    
 
 

您可能感兴趣的文章:

  • 我是新人啊。问一个问题。linux 开发的待遇怎么样啊。。。
  • linux新人请教,ARM开发的问题!
  • 新人求助,进程调度的问题.
  • 新人提问:linux下编辑器的问题 iis7站长之家
  • 新人提问:linux下编辑器的问题
  • 新人,低级问题
  • 新人学习:安装问题
  • 新人,问个模拟器Cygwin编辑代码的时候backspace的问题
  • 关于linux下压缩文件解压的问题????新人求教!!!
  • 新人新年散分混个脸熟,顺便问个菜鸟级LINUX问题
  • 问大家一个绝对很菜的问题,我是新人,别见笑。
  • 新人求助。crontab运行问题
  • 小女子为职场新人,现被分配做wifi的移植,有一问题不懂,请高手指点,急!在线等
  • 纯新人的简单问题,可以查到已经完成的进程的进程号吗?怎么查?
  • 新人,对行业的疑惑,求指点,问个运维的问题
  • 新人请教LINUX下使用hash_map遇到的编译问题
  • jQuery中选择器小问题(新人难免遇到)
  • 新人开发V4L程序碰到的问题
  • 新人高分请教个问题!!!
  • 新人的心问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请问在JSP中,如何获取当前时间呀?小弟是新人,请老大门多指点
  • 我是新人,请问SQLSERVER的驱动程序是什么呀?
  • 我在J2ME是新人, 先给各位哥哥散分 ,小弟有理拉
  • 新人报到:请问如何用jar解开一个*.jar文件
  • DataModule中如何执行SQL,判断数据是否存在??小弟是新人
  • Linux!我来了------我是新人,还请大家多多帮忙
  • 新人报道,大家好!
  • 新人求系统管理简单命令
  • 新人求助:请问安装Red Hat9时,所选软件包安装到哪个目录了?
  • 新人上来散分了
  • Linux 新人 寻求帮助~
  • linux新人,请问大家挂载文件系统是什么意思?有何作用?
  • 新人求助:
  • 新人弱弱问句,安装好FEDORA后怎么学习呢
  • 从vc转linux开发的新人请教~~~~
  • 请问JSP如何能够执行呀?我是新人!
  • 新人求助 关于strcat的错误
  • 大家好,新人报道
  • 新人求救,怎么查软件版本号?
  • ubuntu下把默认的面板删了,自已新建了一个,打开程序最小化后都不见了????(linux新人)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3