Undefined symbol MDirFindNextW (referred from timedtext_splitter.o)

rushdown2012 2012-12-12 09:56:51
ARMCC下编译问题,暂用A库B库代替库名好了, A库不依赖任何库,B库编译需要load A库,单独编译俩库都成功,然后我写了一个调用B库接口的test,同时在makefile load了俩个库,编译失败,错误如题
Undefined symbol MDirFindNextW (referred from timedtext_splitter.o)
在B库的timedtext_splitter.cpp中引用了外部函数MDirFindNextW(),此函数存在于A库的amult.h中。
诡异的是单独编译B库是找的到这个外部函数的。于是我做了以下尝试。
在test的makefile中 去掉A库的加载,发现出现了很多上述的错误,有这样三个错误。
Error: L6218E: Undefined symbol MDirEndFind (referred from timedtext_splitter.o).
Error: L6218E: Undefined symbol MDirFindNextW (referred from timedtext_splitter.o).
Error: L6218E: Undefined symbol MDirStartFindW (referred from timedtext_splitter.o).
可以发现MDirEndFind MDirFindNextW MDirStartFindW 都是在amult.h中声明的,而且声明方式相似。
而这些外部函数都是在B库的timedtext_splitter.cpp中引用的。
所以我纠结了。。。为什么加载了A库,能找得到MDirEndFind MDirStartFindW 却找不到MDirFindNextW。
而单独编译B库,所有的外部函数又都是找得到的呢?有没有人遇到过类似问题的,求帮帮小弟!
...全文
185 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
mujiok2003 2012-12-12
  • 打赏
  • 举报
回复
引用 10 楼 rushdown2012 的回复:
那有没有什么可以解决的办法 给点思路
1.确保amult.cpp中定义和amult.h中的原型一致 2.确保链接顺序正确。 3.查看libA中是否已经包含了那些函数。 一般来说,在前两步中可以解决大部分问题。
rushdown2012 2012-12-12
  • 打赏
  • 举报
回复
引用 9 楼 mujiok2003 的回复:
引用 8 楼 rushdown2012 的回复:引用 7 楼 mujiok2003 的回复:在哪里定义的呢?从编译错误中不能推断已经找到了MDirStartFindW,只能知道MDirFindNextW没有找到。 在amult.cpp里面定义的,编译A库的时候 已经经amult.cpp编进去了。。单独编译B库是可以通过的,也就是说,其实这些外部函数是找的到的,至于tes……
那有没有什么可以解决的办法 给点思路
mujiok2003 2012-12-12
  • 打赏
  • 举报
回复
引用 8 楼 rushdown2012 的回复:
引用 7 楼 mujiok2003 的回复:在哪里定义的呢?从编译错误中不能推断已经找到了MDirStartFindW,只能知道MDirFindNextW没有找到。 在amult.cpp里面定义的,编译A库的时候 已经经amult.cpp编进去了。。单独编译B库是可以通过的,也就是说,其实这些外部函数是找的到的,至于test为什么找不到,有没有可能是头文件重复包含导致的……
不对,静态库编译通过不能说明那些函数的定义都已经找到。
rushdown2012 2012-12-12
  • 打赏
  • 举报
回复
引用 7 楼 mujiok2003 的回复:
在哪里定义的呢?从编译错误中不能推断已经找到了MDirStartFindW,只能知道MDirFindNextW没有找到。
在amult.cpp里面定义的,编译A库的时候 已经经amult.cpp编进去了。。单独编译B库是可以通过的,也就是说,其实这些外部函数是找的到的,至于test为什么找不到,有没有可能是头文件重复包含导致的错误?
mujiok2003 2012-12-12
  • 打赏
  • 举报
回复
在哪里定义的呢?从编译错误中不能推断已经找到了MDirStartFindW,只能知道MDirFindNextW没有找到。
rushdown2012 2012-12-12
  • 打赏
  • 举报
回复
hFind = MDirStartFindW((MVoid*)szTempPath, &FindAtt);
		if(MNull == hFind)
		{
			lResult = MERR_INVALID_PARAM;
			goto EXIT;
		}

		while(MDirFindNextW(hFind, szTempPath, &FindAtt))
		{
			//here may there are unsupported files
			//so we ignore the return value.
			//MLog("CreateNewDataToList szTempPath = %s",szTempPath);
			CreateNewDataToList(szTempPath);
		}

		MDirEndFind(hFind);
这里是B库中timedtext_splitter.cpp调用这些函数的片段。。纠结了。。有没有人知道是为什么?
rushdown2012 2012-12-12
  • 打赏
  • 举报
回复
引用 4 楼 mujiok2003 的回复:
那些symbol是如何申明和定义的?

#ifdef		M_WIDE_CHAR 
 #define	 MDirStartFind		MDirStartFindW
 #define	MDirFindNext		MDirFindNextW
#else
 #define	MDirStartFind		MDirStartFindS
 #define	MDirFindNext		MDirFindNextS
#endif
HMFIND		MDirStartFindS(const MVoid * directory_para, LPMFINDATTRIB pAtt);
HMFIND		MDirStartFindW(const MVoid * directory_para, LPMFINDATTRIB pAtt);

MBool		MDirFindNextS(HMFIND hMFind, MChar*  szFound, LPMFINDATTRIB pAtt);
MBool		MDirFindNextW(HMFIND hMFind, MWChar* szFound, LPMFINDATTRIB pAtt);
这是A库 amult.h头文件中其中俩函数的声明 为什么MDirStartFindW找的到,而MDirFindNextW找不到呢?
mujiok2003 2012-12-12
  • 打赏
  • 举报
回复
那些symbol是如何申明和定义的?
rushdown2012 2012-12-12
  • 打赏
  • 举报
回复
顶上去,求各位大神多发表一下自己的见解!~
rushdown2012 2012-12-12
  • 打赏
  • 举报
回复
引用 1 楼 mujiok2003 的回复:
注意顺序! cc test.cpp libB LibA
我在makefile中的lib顺序是 LIBS += libB libA应该没错啊
mujiok2003 2012-12-12
  • 打赏
  • 举报
回复
注意顺序! cc test.cpp libB LibA
赵4老师 2012-12-12
  • 打赏
  • 举报
回复
system("dir /b /a-d c:\\*.* >d:\\allfiles.txt"); //读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字 system("dir /b /ad c:\\*.* >d:\\alldirs.txt"); //读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字 请记住,能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作,而不要用各种API获取或者操作,因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时,API会处理的不全面或陷入死循环,而shell命令不会。
赵4老师 2012-12-12
  • 打赏
  • 举报
回复
objdump还是要学会用的。

64,652

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧