linux下使用makefile问题集合

来源:互联网 发布:国外羽绒服品牌 知乎 编辑:程序博客网 时间:2024/06/06 02:47

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

问题1. make中使用gcc编译一个c源文件的时候出现如下错误:

make: *** 没有规则可以创建“xxxx.o”需要的目标“gcc”。 停止。


解决方法:查看Makefile文件,可以看到:

xxxx.o: xxxx.c \xxxx.h \$(CC) -c xxxx.c $(CFLAGS)
把"xxxx.h \"后面的"\"去掉,问题解决。make语法,最后一行不需要"\"。


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

问题2. 目录下有一个用C++编译生成的.so动态库文件,使用c文件调用这个动态库,出现报错如下:

error: expected '=', ',', ';', 'asm' or '__attribute__' before xxxx...

网上整理原因有以下几个:

1.原因:用gcc编译cpp文件。解决:用g++编译cpp文件
注:用Makefile很容易误用gcc的,类似问题遇到过无数次……还有连接的时候也是,有些版本的make喜欢用gcc连接,直接挂掉。我通常都在头部加一句CC=g++  CFLAGS=-x c,感觉挺好用。

2.原因:包含头文件时缺少“#”或者函数“{”与“}”没有成对的出现

3.原因:新加的内容与头文件冲突
注:error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘XXX’,如果XXX是类名,那么几乎可以肯定地说是你的C文件里包含了C++头文件。楼主遇到的正是这个问题。建议不要使用10楼的方法。最好的方法是,不要去包含c++头文件!如果你的C文件要用到类,干脆直接将C文件改成CPP文件得了。缺少标点符号和全半角的提示是不一样的。

4 原因. tyepdef int (*psum)(int,int);
 typedef拼写错误。


解决方法

考虑到这里是在c中引用到C++编译的.so动态库,故而,将c文件改为cpp文件,并使用g++编译器重新编译。成功。


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

问题3. 使用如下makefile文件编译的时候出现异常:

arm-linux-gcc -c blacklist.c  -I./includearm-linux-gcc -o CreateBlackList blacklist.o -I./include -L./lib -lxml2arm-linux-gcc -Wall -O2  -L./lib  blacklist.c CreateBlackList   -o blacklist


makefile文件内容大致如下,

CC=arm-linux-gccCFLAGS=-Wall -O2TARGET=CreateBlackList  HDFLAGS=-I./includeLDFLAGS=-L./libblacklist: $(TARGET)$(TARGET): blacklist.o $(CC) -o $(TARGET) blacklist.o $(HDFLAGS) $(LDFLAGS) -lxxxx   %.o: %.c $(CC) -c $< $(CLAGS) $(HDFLAGS)clean: rm -f *.o rm -f $(TARGET)

原因:make目标blacklist和其依赖文件blacklist.o名字一样,导致编译失败;

解决方法:将编译目标名字修改为black,编译成功。



+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

问题4. xxxxx


解决方法












+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
0 0
原创粉丝点击