linux下使用makefile问题集合

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

问题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./include
arm-linux-gcc -o CreateBlackList blacklist.o -I./include -L./lib -lxml2
arm-linux-gcc -Wall -O2  -L./lib  blacklist.c CreateBlackList   -o blacklist



makefile文件内容大致如下,

CC=arm-linux-gcc
CFLAGS=-Wall -O2
TARGET=CreateBlackList  
HDFLAGS=-I./include
LDFLAGS=-L./lib

blacklist: $(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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值