[求助] linux下,make的时候报错,大家来看看是什么问题

mallocguy 2008-01-21 02:43:25
makefile初学,写了个 makefile,make的时候报错,请大家看看:

makefile内容(部分):

# ------- Main body ---------------------------------
all: deps view

deps: $(DEMO_SRCS) Makefile
@echo "Generating new dependency file...";
@-rm -f deps;
@for f in $(DEMO_SRCS); do \
OBJ=objects/`basename $$f|sed -e 's/\.cpp/\.o/' -e 's/\.c/\.o/'`; \
echo $$OBJ: $$f>> deps; \
echo ' $(CC) $$(CFLAGS) $$(CXXFLAGS) -c -o $$@ $$^'>> deps; \
done
-include ./deps

.PHONY:

view.o: $(DEMO_OBJS)
$(LD) -r $(DEMO_OBJS) -o $@ -nostdlib -lpthread -lm


view: view.o $(NANOXLIBS)



clean:
rm -f view
rm -f $(DEMO_DIR)/*.o
rm -f deps


gcc make报错如下:

view.o(.text+0xc5af): In function `__pthread_initialize_manager':
: undefined reference to `_res'
view.o(.text+0xcd9f): In function `__pthread_reset_main_thread':
: undefined reference to `_errno'
view.o(.text+0xcdaf): In function `__pthread_reset_main_thread':
: undefined reference to `_h_errno'
view.o(.text+0xcdb9): In function `__pthread_reset_main_thread':
: undefined reference to `_res'
view.o(.text+0xcf3a): In function `__pthread_kill_other_threads_np':
: undefined reference to `_errno'
view.o(.text+0xcf54): In function `__pthread_kill_other_threads_np':
: undefined reference to `_res'
view.o(.text+0xd3ed): In function `pthread_initialize':
: undefined reference to `_res'
view.o(.text+0xea45): In function `__libc_write':
: undefined reference to `__syscall_error'
view.o(.text+0xea75): In function `__libc_write':
: undefined reference to `__syscall_error'
view.o(.text+0xeaa5): In function `read':
: undefined reference to `__syscall_error'
view.o(.text+0xead5): In function `read':
: undefined reference to `__syscall_error'
view.o(.text+0xeaff): In function `close':
: undefined reference to `__syscall_error'
view.o(.text+0xeb29): more undefined references to `__syscall_error' follow
view.o(.data+0x3338): undefined reference to `_errno'
view.o(.data+0x3340): undefined reference to `_h_errno'
view.o(.data+0x3348): undefined reference to `_res'
collect2: ld returned 1 exit status
make: *** [view] Error 1


请教大家这是什么问题?
...全文
670 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingwoo 2008-01-24
  • 打赏
  • 举报
回复
是不是viewshmj.o里定义了一些标准库里的东西,比如init,start等
但是这个文件里又没有定义全,比如errno,syscall_erro等
所以在传-nostdlib时有些全局量找不到,而不传时出现重复定义
可以用nm命令查看一下各个库里面是否包含有楼顶上所没找到的全局量/函数
如果你确定自己都已经有实现过
那么可以试试这样
$(LD) -r $(DEMO_OBJS) $(DEMO_OBJS) -o $@ -nostdlib -lpthread -lm
注意,这里是两个$(DEMO_OBJS)
因为ld只会在后续的lib中查找符号,不会往前搜索
如果还是不行,就没辙了
kingwoo 2008-01-23
  • 打赏
  • 举报
回复
晕,是我搞错了
这是link的时候出错不是编译的时候出错
这句
$(LD) -r $(DEMO_OBJS) -o $@ -nostdlib -lpthread -lm
-nostdlib去掉试试看
mallocguy 2008-01-23
  • 打赏
  • 举报
回复
CFLAGS = -Wall -D_DEBUG=1 -O2 -v -fomit-frame-pointer -I. $(addprefix -I,$(SDK_INCLUDE))
这句加了没用啊,有人知道是什么原因吗?
mallocguy 2008-01-22
  • 打赏
  • 举报
回复
=============
-nostdlib
为啥加这个?
===============

只有命令行指定的项才传递给链接器。标准启动文件和库都不会传递给链接器,这个是为了减少连接空间。
我去掉之后试着make了下,编译器报错:
gcc -r /home/cannsy/caijizhi/new/viewshmj/viewshmj/src/basePlayer.o /home/cannsm
gcc viewshmj.o /home/cannsy/caijizhi/new/viewshmj/viewshmj/microwindows-0.90/j
viewshmj.o(.rodata+0x0): multiple definition of `_fp_hw'
/usr/lib/gcc-lib/i386-redhat-linux/3.2.3/../../../crt1.o(.rodata+0x0): first dee
viewshmj.o(.data+0x4): In function `__data_start':
: multiple definition of `__dso_handle'
/usr/lib/gcc-lib/i386-redhat-linux/3.2.3/crtbegin.o(.data+0x0): first defined he
viewshmj.o(.init+0x0): In function `_init':
: multiple definition of `_init'
/usr/lib/gcc-lib/i386-redhat-linux/3.2.3/../../../crti.o(.init+0x0): first defie
viewshmj.o(.text+0x0): In function `_start':
: multiple definition of `_start'
/usr/lib/gcc-lib/i386-redhat-linux/3.2.3/../../../crt1.o(.text+0x0): first defie
viewshmj.o(.fini+0x0): In function `_fini':
: multiple definition of `_fini'
/usr/lib/gcc-lib/i386-redhat-linux/3.2.3/../../../crti.o(.fini+0x0): first defie
viewshmj.o(.rodata+0x4): multiple definition of `_IO_stdin_used'
/usr/lib/gcc-lib/i386-redhat-linux/3.2.3/../../../crt1.o(.rodata+0x4): first dee
viewshmj.o(.data+0x0): In function `__data_start':
: multiple definition of `__data_start'
: multiple definition of `__data_start'
/usr/lib/gcc-lib/i386-redhat-linux/3.2.3/../../../crt1.o(.data+0x0): first defie
collect2: ld returned 1 exit status
make: *** [viewshmj] Error 1


而且生成的viewshmj.o文件比一般的大很多
以前移植了个没有调用<pthread.h>是可以编译通过的,为什么这次不行


mallocguy 2008-01-22
  • 打赏
  • 举报
回复
=====================
你的CFLAGS和CXXFLAGS怎么定义的
直接用-I加头文件路径试试
========================

定义是这样的:
CFLAGS = -Wall -D_DEBUG=1 -O2 -v -fomit-frame-pointer -I. $(SDK_INCLUDE)
CXXFLAGS = -Wall -g3 -D_DEBUG=1 -O0 -I. $(SDK_INCLUDE)

kingwoo 2008-01-22
  • 打赏
  • 举报
回复
CFLAGS = -Wall -D_DEBUG=1 -O2 -v -fomit-frame-pointer -I. $(addprefix -I,$(SDK_INCLUDE))
mallocguy 2008-01-22
  • 打赏
  • 举报
回复
怀疑是 view: view.o $(NANOXLIBS) 这步里连接$(NANOXLIBS)库文件的时候出错
但是$(NANOXLIBS)是.a结尾的静态库文件,能不能查找.a文件里有没有
`__pthread_initialize_manager'这类的函数呢?
mallocguy 2008-01-22
  • 打赏
  • 举报
回复
为什么可以生成viewshmj.o,而在最后link生成viewshmj的时候会出现:
In function `pthread_initialize':
: undefined reference to `_res'
难道是makefile写错了,有达人指导下吗?已经困扰两天了,谢谢
mymtom 2008-01-21
  • 打赏
  • 举报
回复
-nostdlib
========
为啥加这个?
desiderata 2008-01-21
  • 打赏
  • 举报
回复
你的CFLAGS和CXXFLAGS怎么定义的
直接用-I加头文件路径试试
mallocguy 2008-01-21
  • 打赏
  • 举报
回复
没人知道是什么出错吗?自己顶下
mallocguy 2008-01-21
  • 打赏
  • 举报
回复
不知道是makefile写错了,还是程序调用pthread.h头文件出现了错误

23,127

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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