undefined reference to 函数名

slitaz 2014-08-04 02:32:22
直接上问题:
A.c文件里
void * video(){
.....
}

同一个工程里的B.c
extern void *video()
....
pthread_create(&pid,NULL,video,(void *)GTK_WINDOW(win->toplevel));
....

在编译B.c文件时 出现undefined reference to video
collect2: ld returned 1 exit status

因为工程比较大 所以 不能单独拿b.c出来编译
查看


我尝试另建一个小工程 编写个精简的video函数,和在另一个文件中来创建video线程 则能编译通过
可是 我这个相对大的工程当中 为什么就会报错呢?

...全文
567 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-08-25
  • 打赏
  • 举报
回复
使用线程要引入线程库-lpthread
slitaz 2014-08-25
  • 打赏
  • 举报
回复
用尽各种办法 这个问题 还是没能完美解决。 最后 只好 用其他效率不高的方法。
赵4老师 2014-08-05
  • 打赏
  • 举报
回复
项目、属性、链接器、常规、附加库目录:填写附加依赖库所在目录 分号间隔多项 项目、属性、链接器、输入、附加依赖项:填写附加依赖库的名字.lib 空格或分号间隔多项
shiguojie19892 2014-08-05
  • 打赏
  • 举报
回复
就是没有函数声明,可能是少编译了什么文件。
勤奋的小游侠 2014-08-04
  • 打赏
  • 举报
回复
估计还是makefile写漏东西了
angel_su 2014-08-04
  • 打赏
  • 举报
回复
都在链接阶段了,可能a.o最后没加进去...
slitaz 2014-08-04
  • 打赏
  • 举报
回复
按正常来说 以上两种方法 都是可行的 其实在其他.c里也有同样的用法 可是 偏偏我这个b.c里的却编译通过不了。 修改它makefike gcc .... -c -o `test -f 'b.c' || echo $(srcdir)/`b.c 添加 gcc .... -c -o `test -f 'b.c' || echo $(srcdir)/`b.c mmr/a.c 或 gcc .... -c -o `test -f 'b.c' || echo $(srcdir)/`b.c mmr/a.o 均会显示:undefined reference to video 纠结。。
Cnwanglin 2014-08-04
  • 打赏
  • 举报
回复
只需要在b.c 里 include 一个头文件,比如 extern_a.h extern_a.h里有 extern void* a()就可以了 a.c -> a.o b.c 去找a.o里关于 void* a()的定义,找到了就没错误
神奕 2014-08-04
  • 打赏
  • 举报
回复
需要在A.c文件里定义函数时声明extern吧:

extern void * video(){
.....
}
然后在B.c文件中:

void *video();
....
pthread_create(&pid,NULL,video,(void *)GTK_WINDOW(win->toplevel));
....
slitaz 2014-08-04
  • 打赏
  • 举报
回复
或者 在B.c文件里 #include "mmr/B.h" .... pthread_create(&pid,NULL,video,(void *)GTK_WINDOW(win->toplevel)); .... 在mmr文件夹下创建A.h A.h ... void *video(); A.c里 void *video(){ ..... } 同样报 undefined reference to video

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧