阅读:5635回复:47
问一个简单的问题,明白人请进!
大侠们问一个弱问题,halether.c里声明函数的原型和定义一般放在哪个目录下啊,比如SMDK2410里halether.c里的CS8900DBG_Init()函数是在哪里定义的啊?我在Drivers目录里面文件中加上了这个函数的定义怎么还是编译出错: unresolved external symbol CS8900DBG_Init啊~~~能不能看看怎么回事捏??
[编辑 - 1/18/05 by zouyingmyfriend] |
|
论坛版主
|
沙发#
发布于:2005-01-18 15:00
不光是头文件的问题,你需要在你使用的头文件中用extern申明,然后在sources里面加:
TARGETLIBS=$(TARGETPLATROOT)\\LIB\\$(_CPUDEPPATH\\CS8900DBG.LIB |
|
论坛版主
|
板凳#
发布于:2005-01-18 15:01
TARGETLIBS=$(TARGETPLATROOT)\\LIB\\$(_CPUDEPPATH)\\CS8900DBG.LIB
|
|
地板#
发布于:2005-01-18 15:17
To wxl_50685330大哥:
我知道TARGETLIBS,但我不太清楚SOURCELIBS,请你解释一下它们的区别和用法。 |
|
|
地下室#
发布于:2005-01-18 15:23
不光是头文件的问题,你需要在你使用的头文件中用extern申明,然后在sources里面加: 大哥的意思是用 #ifdef __cplusplus extern "C" { #endif ... ... ... #ifdef __cplusplus } #endif ,对吗? |
|
|
论坛版主
|
5楼#
发布于:2005-01-18 15:56
要不要EXTERN "C"要看是不是在.CPP里面用C的函数
TARGETLIBS和SOURCESLIBS我也没搞清楚,你娃研究一下三。 wwei_wang 兄弟,原来听说你弄好的,你用的loadintchainhandler那个dll有没得啥子需要注意的,好些在问说用giisr就可以加载,自己定义的就不能挂上去,咋个回事?是不是路径放得不对? |
|
6楼#
发布于:2005-01-18 16:19
在修改bib文件时,要把自己写的isr dll放到files section里面,不要放在Moudles section里面就行了,否则会加载失败:)))
大哥你说的是这个事儿吧? (我在另外你一个帖子里也灌了) 对了,你前面说 “不光是头文件的问题,你需要在你使用的头文件中用extern申明,....” 用extern声明是什么意思啊?请大哥明示。 |
|
|
论坛版主
|
7楼#
发布于:2005-01-18 16:26
他要用库函数,我说用用EXTERN申明这个函数来自本模块外部三,这下你又都看到了,咋个搞得嘛...刚才写了好多处你娃都没得反应,哥哥手都写得发抖啊:))
|
|
8楼#
发布于:2005-01-18 18:46
To wxl_50685330:为了我们这些革命兄弟,你辛苦了,代表人民感谢你:))))
To zouyingmyfriend: 兄弟,你查查halether.h文件,halether.c里的函数原型和定义可能在这个文件里面。 |
|
|
9楼#
发布于:2005-01-19 10:58
经过多处修改,我重新编译eboot居然不能通过了,出现了著名的错误:NMAKE : U1073: don't know how to make 'D:/WINCE420/PUBLIC/SMDK~2/WINCE420/smdk2410/cesysgen/oak/lib/ARMV4I/retail/cs8900dbg.lib'
sources文件都已经改正了还是不行,到底什么问题啊。 查了MSDN发现他给的提示我还是不知道怎么改,我发现自己已经有点晕了,不清楚这些驱动文件在CE里面的调用关系,大哥们能不能简单讲一下? [编辑 - 1/19/05 by zouyingmyfriend] |
|
论坛版主
|
10楼#
发布于:2005-01-20 13:29
:)这个啊,最直接的办法,它不是报告没找到cs8900dbg.lib吗,那你就把这个东西考到它报告找不到的目录里面这个库在public\\common\\oak\\lib里面
|
|
11楼#
发布于:2005-01-20 16:17
:)这个啊,最直接的办法,它不是报告没找到cs8900dbg.lib吗,那你就把这个东西考到它报告找不到的目录里面这个库在public\common\oak\lib里面 这个方法治标不治本啊,下次rebuild又出来了:( 不过还是问一个很弱的问题吧,在CE里面各种iobase和Membase是按照什么规则分配的啊,和硬件连接有没有关系,偏移量如何掌握啊,我完全看不懂啊,大哥能不能讲讲? |
|
论坛版主
|
12楼#
发布于:2005-01-21 13:06
我给你说的办法是可行性最好的三,我不知道少配了什么环境变量:))
IOBASE和MEMBASE是用户自己定义的,主要是硬件上定的,你需要和你们的硬件工程师讨论一下 不过CE自己有地址空间的安排,它只能管理512M的空间从0X8000000到0XBFFFFFFF,其中前256MB是可缓存的,后面的是不可缓存的,他们映射到相同的物理地址空间。这些空间之间的映射关系由BSP里面的OEMADDRESSTABEL定义,你可以看看 |
|
13楼#
发布于:2005-01-24 09:23
那么各个设备的驱动都要生成.lib文件,这些文件的生成规则是在哪里定义的啊,在这个定义里面改一下我的驱动,不是应该就能够编译出来了么,只是我找不到这个定义,不知道是哪个makefile还是sources……
|
|
14楼#
发布于:2005-01-24 10:05
编译规则是在makefile文件里定义的,但是这个文件最好不要改;
sources文件里定义了要编译的源文件,头文件,库,目标文件类型,目标文件名等信息,如果要编译你自己的驱动,修改source文件就可以了。 另外,驱动程序是dll文件,lib文件包含了dll的接口信息。 [编辑 - 1/24/05 by wwei_wang] |
|
|
15楼#
发布于:2005-01-24 12:23
谢谢哥哥,不过这个概念我已经很清楚了,但是挂在BSP下的Driver目录的各个源程序在编译的时候只有一个不能link,我想是应该改这个不能link的东西的设置,但是我找不到针对这个目录的sources,能不能帮我找到这个sources,改的方法仿照别的驱动是不是就可以啦?
再叙述一下,路径为:D:/WINCE420/PLATFORM/SMDK2410/DRIVERS,驱动程序CS8900dbg不能link,然后显示的错误是NMAKE : U1073: don't know how to make 'D:/WINCE420/PUBLIC/.../WINCE420/smdk2410/cesysgen/oak/lib/ARMV4I/retail/cs8900dbg.lib',结果显示在link阶段不能连接提示此错误。但是实际上在build阶段已经生成了cs8900dbg.lib这个文件。 这是什么原因呢,强烈困扰中:(((((( |
|
16楼#
发布于:2005-01-24 13:22
谢谢哥哥,不过这个概念我已经很清楚了,但是挂在BSP下的Driver目录的各个源程序在编译的时候只有一个不能link,我想是应该改这个不能link的东西的设置,但是我找不到针对这个目录的sources,能不能帮我找到这个sources,改的方法仿照别的驱动是不是就可以啦? (1)建议删掉这个驱动目录下在编译过程中生成的子目录,即只保留源程序; (2)你的驱动目录里面没有source文件?如果真的没有,仿照别的驱动里面的source生成一个就行了。注意:加上编译时所需的一些库文件及其路径。 |
|
|
17楼#
发布于:2005-01-24 14:35
很遗憾哥哥,这样做没有任何效果,还是一样的不能编译。明明已经生成了cs8900dbg.lib却无法连接link,真是诧异,一定是在哪里还需要设置,另外我的sources也是改得和Nandflsh的一样,奇怪,nand就可以link,但是这个就不行,55555555555555555555
|
|
论坛版主
|
18楼#
发布于:2005-01-25 13:35
哇,怎么说话都变成一大段一大段了:)))
你的那个CS8900.LIB编译出来放到哪儿了?如果没放对地方就不行三,你是不是建的编译环境没有给到PUBLIC\\YOURPLATFORM?记住,你的LIB要考到PUBLIC\\YOURPLATFORM\\cesysgen\\oak\\lib\\ARMV4I\\retail 那个YOURPLATFORM就是你在PB里面建的平台的名字,不是COMMON哈 |
|
19楼#
发布于:2005-01-25 13:43
几天不见了,大哥终于又显身了:)))
|
|
|
上一页
下一页