GCC MakeFile Asrc 的设置-GCC ASM混合编译
来源:互联网 发布:mysql 指定账户已存在 编辑:程序博客网 时间:2024/06/11 04:56
最近一直在学习V-USB(AVRUSB),弄了一个例程却一直编译不通过,提示 “undefined reference to usbCrc16Append()”。这个其实就是说usbCrc16Append()函数没有定义啦,上网搜了一下这个函数是在usbdrvasm.S的汇编文件里面的定义的汇编函数,提示找不到应该就是编译的时候没有将usbdrvasm.S一起编译,我也不晓得怎么让WinAVR如何将.c和.S文件一起编译(在AVR Studio中只要添加usbdrvasm.S这个文件到SourceFile应该就可以,但是会报其他错误)。
上网搜了GCC和ASM混为编译,找到的信息都只是说如何在.C中调用.S中的函数,却没有说如何设置让它们一起被编译。我就擅自在mian.c中加了一个#include "usbdrv/usbdrvasm.S" 提示报出一堆错误,只能在去寻找答案。
后来发现MakeFile里面的Src可以设置多个源程序,就设置Src=main.c usbdrvasm.S,有报了一堆错误,看来这个Src只能为.c的源程序。后来又突然发现MakeFile里面的ASrc的属性可以设置.S的汇编源文件,看来就是它了,设置ASrc=usbdrvasm.S。编译有出错,提示“no rule to make main.elf"。很奇怪哦!按道理应该好了啊,为什么还是不行能?我知道这里编译的过程是将main.c编译成main.o,把usbdrvasm.S编译成usbdrvasm.o,最后在把两个.o文件链接起来。有上网搜了一番,在老外的论坛里有人提示说要加目录 Asrc=usbdrv/usbdrvasm.S,试了一下,果然成功了。在makefile的注释文字里有提示说不要加路径,想不到自己理解错了,只是不需要加根目录的路径,但是子目录的路径还是要加的!
顺便说一下 ”EXTRAINCDIRS = usbdrv“ 如果你在MakeFile里设置了这个子目录的话,对于#include "usbdrv/usbdrv.h"可以简写成#include "usbdrv.h"。但是对于Asrc=usbdrv/usbdrvasm.S,依然要把目录写全!它只是对#include起作用!
最后申明一下,我是新手,我写这些文字只是想让后来者少走一些弯路,毕竟这种细节问题网上很少有讲到。高手请绕道~
- GCC MakeFile Asrc 的设置-GCC ASM混合编译
- GCC makefile 警告设置
- GCC 下 C和ASM混合编程
- gcc asm
- gcc编译过程+Makefile反思
- gcc/g++编译makefile文件
- gcc编译设置
- Linux下GCC和Makefile实例(从GCC的编译到Makefile的引入)
- Linux下GCC和Makefile实例(从GCC的编译到Makefile的引入)
- Linux下GCC和Makefile实例(从GCC的编译到Makefile的引入)
- GCC的Makefile
- GCC的makefile例程
- 【gcc】gcc的编译流程
- 从gcc的编译到makefile的引入
- 继续C++:gcc编译、连接和makefile的使用
- cygwin + gcc+makeFile入门(三): JNI的编译
- stm32 在windows下 使用gcc 编译的makefile脚本
- linux中makefile与gcc编译的比较
- List【怪异】的初始化方式
- HashTable的实现
- 关于ftp只能自己访问的问题
- Java有用知识
- 导入Custom的Master page(含自定义的CSS) 到Moss 2007
- GCC MakeFile Asrc 的设置-GCC ASM混合编译
- 【顽症】客户端调用DLL类库项目时,config文件中自定义Section的顺序
- PHP PCRE 整理
- 大学毕业前一定要看的9本书
- 【软件】Dreamweaver cs4 破解安装方法
- 2.6.31内核编译处理3个错误 (redhat)
- 一个Linux爱好者的2.6.11内核编译过程
- the Secret DAILY TEACHINGS-Day 40
- the Secret DAILY TEACHINGS-Day 41