Chinaunix

标题: 急求makefile.am问题!!! [打印本页]

作者: happybgt    时间: 2009-04-03 15:26
标题: 急求makefile.am问题!!!
最新!问题修改为:
我的程序结构是这样的:
总共两个目录:viaencode/   videolib/
viaencode/下有:两个源文件和一个makefile.am文件 encodeapi.c  、viaenc.c 、 Makefile.am
videolib/下有:四个头文件 MP4EncApi.h、hw_lib.h、ViaApi.h 、itu.h
以及六个.a库文件:libext_device_ctrl.a 、libhwdec.a、libhwenc.a、libitu.a、libuserdev.a、libvia.a

Makefile.am中内容为:
bin_PROGRAMS = viaenc
viaenc_SOURCES = viaenc.c encodeapi.c
AM_CFLAGS = -I../videolib
LDADD = -L../videolib -lvia -litu -lhwdec -lext_device_ctrl -lhwenc -lpthread -luserdev

生成makefile后,我将其中的
CC = gcc改成
CC=/usr/local/arm/gcc-3.4.4-glibc-2.3.6/bin/arm-linux-gcc

make后的错误提示如下:  

[root@ARM viaencode]# make
make  all-am
make[1]: Entering directory `/root/video_save/viaencode'
/usr/local/arm/gcc-3.4.4-glibc-2.3.6/bin/arm-linux-gcc -I../videolib -g -O2   -o viaenc  viaenc.o encodeapi.o -L../videolib -lvia -litu -lhwdec -lext_device_ctrl -lhwenc -lpthread -luserdev  -lpthread
/usr/local/arm/gcc-3.4.4-glibc-2.3.6/bin/../lib/gcc/arm-linux/3.4.4/../../../../arm-linux/bin/ld: viaenc.o: Relocations in generic ELF (EM: 3)
viaenc.o: could not read symbols: File in wrong format
collect2: ld returned 1 exit status

make[1]: *** [viaenc] Error 1
make[1]: Leaving directory `/root/video_save/viaencode'
make: *** [all] Error 2
[root@ARM viaencode]#

从Makefile.am的第四行以及结合make后出错的信息可以看出出错的原因,不知道如何解决,请各位帮帮忙,谢谢

[ 本帖最后由 happybgt 于 2009-4-13 11:06 编辑 ]
作者: tonylulu    时间: 2009-04-03 15:26
标题: re
交叉编译不是换个cc就可以的。
还有ld,ar,as等等阿

CC=/usr/local/arm/gcc-3.4.4-glibc-2.3.6/bin/arm-linux-gcc
LD=/usr/local/arm/gcc-3.4.4-glibc-2.3.6/bin/arm-linux-ld
AR=/usr/local/arm/gcc-3.4.4-glibc-2.3.6/bin/arm-linux-ar
AS=/usr/local/arm/gcc-3.4.4-glibc-2.3.6/bin/arm-linux-as
作者: chenyx    时间: 2009-04-03 15:32
config.status: error: cannot find input file: config.h.in
缺文件
作者: happybgt    时间: 2009-04-03 15:42
原帖由 chenyx 于 2009-4-3 15:32 发表
config.status: error: cannot find input file: config.h.in
缺文件

这是我在生成makefile时产生的错误,已解决,现在是make 时出现了错误~

[ 本帖最后由 happybgt 于 2009-4-11 10:00 编辑 ]
作者: happybgt    时间: 2009-04-03 15:57
在线等,求求各位大侠帮帮忙!!
作者: happybgt    时间: 2009-04-08 08:56
几天过去了,没人帮我啊,呜呜~
作者: linke.wang    时间: 2009-04-08 18:37
标题: 回复 #1 happybgt 的帖子
/usr/bin/ld: skipping incompatible ../videolib/libvia.a when searching for -lvia
/usr/bin/ld: cannot find -lvia
从出错信息来看,和libvia这个库有关,可能是缺库,或者没找到库。
请楼主把情况再说得详细点。
作者: happybgt    时间: 2009-04-11 09:29
原帖由 linke.wang 于 2009-4-8 18:37 发表
/usr/bin/ld: skipping incompatible ../videolib/libvia.a when searching for -lvia
/usr/bin/ld: cannot find -lvia
从出错信息来看,和libvia这个库有关,可能是缺库,或者没找到库。
请楼主把情况再说得 ...

我的程序结构是这样的:
总共两个目录:viaencode/   videolib/
viaencode/下有:两个源文件和一个makefile.am文件 encodeapi.c  、viaenc.c 、 Makefile.am
videolib/下有:四个头文件 MP4EncApi.h、hw_lib.h、ViaApi.h 、itu.h
以及六个.a库文件:libext_device_ctrl.a 、libhwdec.a、libhwenc.a、libitu.a、libuserdev.a、libvia.a

Makefile.am中内容为:
bin_PROGRAMS = viaenc
viaenc_SOURCES = viaenc.c encodeapi.c
AM_CFLAGS = -I../videolib
LDADD = -L../videolib -lvia -litu -lhwdec -lext_device_ctrl -lhwenc -lpthread -luserdev

从上面第四行以及结合make后出错的信息:
/usr/bin/ld: skipping incompatible ../videolib/libvia.a when searching for -l
via
/usr/bin/ld: cannot find -lvia
collect2: ld returned 1 exit status
make[1]: *** [viaenc] Error 1
make[1]: Leaving directory `/root/vedio_save/viaencode'
make: *** [all] Error 2
可以看出,出错的原因在于库,应该是videolib/下的六个库文件没有连接上,不知道如何解决,请各位帮帮忙,谢谢

[ 本帖最后由 happybgt 于 2009-4-11 09:31 编辑 ]
作者: MMMIX    时间: 2009-04-11 10:31
原帖由 linke.wang 于 2009-4-8 18:37 发表
/usr/bin/ld: skipping incompatible ../videolib/libvia.a when searching for -lvia
/usr/bin/ld: cannot find -lvia
从出错信息来看,和libvia这个库有关,可能是缺库,或者没找到库。

这个是库文件找到了,可是不匹配,例如说当前机器是 64 位的,可库 libvia 却是 32 位的,或者类似的情况。
作者: happybgt    时间: 2009-04-11 12:41
是啊,楼上的,链接到默认的/usr/bin/ld,而我需要链接到我指定的库,
请问那怎么才能链接到我需要的videolib/下的六个.a库文件:libext_device_ctrl.a 、libhwdec.a、libhwenc.a、libitu.a、libuserdev.a、libvia.a

[ 本帖最后由 happybgt 于 2009-4-11 12:45 编辑 ]
作者: MMMIX    时间: 2009-04-11 13:14
原帖由 happybgt 于 2009-4-11 12:41 发表
是啊,楼上的,链接到默认的/usr/bin/ld,而我需要链接到我指定的库,
请问那怎么才能链接到我需要的videolib/下的六个.a库文件:libext_device_ctrl.a 、libhwdec.a、libhwenc.a、libitu.a、libuserdev.a、libvia.a

你仔细看我上面的回复了么?看明白了么?
作者: happybgt    时间: 2009-04-11 20:12
标题: 回复 #10 MMMIX 的帖子
哦,谢谢你,大意了,不好意思,
那我想问问,怎么才能让库匹配啊
作者: MMMIX    时间: 2009-04-11 22:14
原帖由 happybgt 于 2009-4-11 20:12 发表
那我想问问,怎么才能让库匹配啊

你用的啥 CPU,就装和它对应的库呗。
作者: happybgt    时间: 2009-04-13 11:25
标题: 回复 #12 MMMIX 的帖子
麻烦你重新看看我最上面新的问题,这是我刚刚重新执行make后的完整出错信息,以前的/usr/bin/ld: skipping incompatible ../videolib/libvia.a when searching for -lvia这个错误信息,是因为我把六个静态库从目录videolib/改放在和源程序同一个目录viaencode/下才出现的。
作者: MMMIX    时间: 2009-04-13 13:38
原帖由 happybgt 于 2009-4-13 11:25 发表
麻烦你重新看看我最上面新的问题,这是我刚刚重新执行make后的完整出错信息,以前的/usr/bin/ld: skipping incompatible ../videolib/libvia.a when searching for -lvia这个错误信息,是因为我把六个静态库从目 ...

你的这些 .a 是从什么地方来的?那个出错的 .o 又是怎么来的?

BTW,交叉编译往往不是换个编译器名字这么简单。
作者: happybgt    时间: 2009-04-13 15:10
标题: 回复 #14 MMMIX 的帖子
首先谢谢你对我问题的一直关注,
6个.a 文件是已有的板子的SDK中的,从makefile.am总可看出,这六个库文件是需要的,viaenc.o是make后产生的,我的目标文件是生成viaenc这个文件。
我的交叉编译环境没有问题,现在生成makefile了,就是make后有问题,那么怎么样才能交叉编译成功啊?!忘指点~

[ 本帖最后由 happybgt 于 2009-4-13 15:15 编辑 ]
作者: MMMIX    时间: 2009-04-13 16:35
原帖由 happybgt 于 2009-4-13 15:10 发表
首先谢谢你对我问题的一直关注,
6个.a 文件是已有的板子的SDK中的,

哦,那不匹配的问题就是由于没有使用交叉编译工具链导致的。
从makefile.am总可看出,这六个库文件是需要的,viaenc.o是make后产生的,

那怎么看不到编译它的命令?你是完全从头编译么?
作者: happybgt    时间: 2009-04-13 17:55
标题: 回复 #16 MMMIX 的帖子
"由于没有使用交叉编译工具链导致的",那怎么使用交叉编译工具链??
我是从头编译的,不过.a 库文件已有,我的目标文件是生成viaenc这个文件,make后就产生了viaenc.o,按理说应该是viaenc.o和库进行链接再生成目标文件viaenc。
作者: MMMIX    时间: 2009-04-13 18:21
原帖由 happybgt 于 2009-4-13 17:55 发表
"由于没有使用交叉编译工具链导致的",那怎么使用交叉编译工具链??

先别管这个了。
我是从头编译的,不过.a 库文件已有,我的目标文件是生成viaenc这个文件,make后就产生了viaenc.o,

把这个 .o 删掉重新 make,我估计你用的是先前生成的 .o
作者: happybgt    时间: 2009-04-13 21:16
标题: 回复 #18 MMMIX 的帖子
我就是把整个过程都重弄了一遍,包括重新生成makefile,重新make的,一样的结果
作者: MMMIX    时间: 2009-04-14 10:57
原帖由 happybgt 于 2009-4-13 21:16 发表
我就是把整个过程都重弄了一遍,包括重新生成makefile,重新make的,一样的结果

你怎么就是不看我的回复呢。

算了,这个帖子我不再跟进了。
作者: happybgt    时间: 2009-04-14 15:36
原帖由 MMMIX 于 2009-4-14 10:57 发表

你怎么就是不看我的回复呢。

算了,这个帖子我不再跟进了。

我知道你的意思,你以为我用的是先前生成的 .o,让我把这个 .o 删掉重新 make!!
就算按你说的,也不行!!而且这个我早就试过了。
而我前一个帖子想表达的是,我是更加彻底的从头重新执行整个过程的,第一次make后,其结果还是一样的。什么是第一次make?就是说压根没有.o的情况下make的,are you see it ?!
不过依然感谢你的帮助!

[ 本帖最后由 happybgt 于 2009-4-14 15:37 编辑 ]
作者: MMMIX    时间: 2009-04-14 15:47
原帖由 happybgt 于 2009-4-14 15:36 发表
我知道你的意思,你以为我用的是先前生成的 .o,让我把这个 .o 删掉重新 make!!
就算按你说的,也不行!!而且这个我早就试过了。
而我前一个帖子想表达的是,我是更加彻底的从头重新执行整个过程的,第一次make后,其结果还是一样的。什么是第一次make?就是说压根没有.o的情况下make的,are you see it ?!

如果真像你说的这样,那么编译 .o 的命令在什么地方?
作者: happybgt    时间: 2009-04-14 19:48
标题: 看来问题很难解决啊
看来问题很难解决啊

[ 本帖最后由 happybgt 于 2009-4-14 20:56 编辑 ]
作者: happybgt    时间: 2009-04-14 20:52
标题: 路漫漫啊
路漫漫啊

[ 本帖最后由 happybgt 于 2009-4-14 20:54 编辑 ]
作者: happybgt    时间: 2009-04-14 20:55
标题: 回复 #22 MMMIX 的帖子
我想应该是这样的,如果一切正确的情况下,没有任何错误的时候,make后应该最终生成二进制文件viaenc,而viaenc.o只是生成二进制文件viaenc的中间文件,现在有问题,所以make后只生成了viaenc.o,没有最终生成viaenc。编译 .o 的命令应该在由makefile.am生成的makefile中。不知道我说的对不对~
作者: happybgt    时间: 2009-04-15 16:00
标题: 回复 #26 tonylulu 的帖子
makefile.am生成的makefile中,我看了一下,没有你说的
LD=...
AR=...
AS=...

只有
CC = gcc
ac_ct_CC = gcc
我将第一个改成了CC=/usr/local/arm/gcc-3.4.4-glibc-2.3.6/bin/arm-linux-gcc,这个以前就改过。
第二个不知道干啥的,改成ac_ct_CC =/usr/local/arm/gcc-3.4.4-glibc-2.3.6/bin/arm-linux-gcc,我试了下,改不该都一样。

这次我的问题已经解决了,发现不知道什么时候videolib\目录下的库文件少了几个,添加上就好了,生成了我的目标文件viaenc.

虽然这次解决问题的道路非常曲折,但是非常感谢楼上所有朋友对我问题的支持,谢谢!

[ 本帖最后由 happybgt 于 2009-4-15 16:12 编辑 ]
作者: tonylulu    时间: 2009-04-17 01:09
标题: re
没有指明ld,ar,as
因为你是用 autotool工具生成Makefile,默认使用了你宿主机上的ld ar等等
你应该添加上去。
参照内核的的makefile
CROSS_COMPILE=/usr/local/arm/gcc-3.4.4-glibc-2.3.6/bin/arm-linux-
AS              = $(CROSS_COMPILE)as                                                                                          
LD              = $(CROSS_COMPILE)ld                                                                                          
CC              = $(CROSS_COMPILE)gcc                                                                                         
CPP             = $(CC) -E                                                                                                   
AR              = $(CROSS_COMPILE)ar                                                                                          
NM              = $(CROSS_COMPILE)nm                                                                                          
STRIP           = $(CROSS_COMPILE)strip                                                                                       
OBJCOPY         = $(CROSS_COMPILE)objcopy                                                                                    
OBJDUMP         = $(CROSS_COMPILE)objdump      
你如果不把ld,cc,ar,as,等指向你的交叉工具链,那么你即使编译成功后也无法在目标板运行的。
作者: happybgt    时间: 2009-04-17 15:39
标题: 回复 #28 tonylulu 的帖子
我没有加ld,ar,as,就改了CC,但是编译成功后的目标文件在目标板上成功运行了,奇怪啊,这又是作何解释呢
ac_ct_CC = gcc又是干什么的?这个要改吗?

[ 本帖最后由 happybgt 于 2009-4-17 15:49 编辑 ]




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2