diab和gnu交叉使用问题

diab和gnu交叉使用问题

从周一1225下午,到现在周四1228上午,主要和笑哥解决一个现场移植问题,这个问题的产生很少见。我们知道一般开发一套程序,用于构建的工具链一般是同一套,你要么使用微软自己的ICC,要么使用vxworks下独有的diab,又或者使用开源的gnu工具链。此次的问题在于,我司提供给客户基于gnu的操作系统和开发环境,目的就是让客户基于我们的开发环境来编译构建运行在我司deltaos操作系统下的应用程序以及库。然而,客户一直在vxworks下的开发环境windriver下开发,使用的工具链则是diab。现在呢,他们想要在deltaos上跑一个dkm.out程序,但他们却是直接使用在windriver下构建好了的程序,却没有经过移到deltaos下的开发环境下进行编译。不知道为什么要这样做!但显然带来了一个根本问题:用diab编译出来的out文件,可以在使用gnu编译的deltaos下运行吗?
实际情况是:dkm.out文件在下载运行时,会二次链接生成elf文件。而在生成的过程中报错了:有很多未定义但引用了的符号。
现在就开始解决!
我们首先想的是把dkm项目重新用deltaos-IDE构建,但它链接的ticon库(ticon,类似于qtGui的图形库,比windml更高层一点,因其小巧常用在嵌入式中)仍使用他们给的使用diab编译的库。 (为什么ticon库不用deltaos-IDE重新编译,询问他们得知用gnu编译的ticon库不稳定。但我认为,既然是移植,为什么不把所有的源码都用deltaos-IDE编译一遍呢?)
这样来的话,就报了一个错误,生成ctdt.c文件的时候,报了diab和gnu不兼容的错误。我不是很清楚ctdt.c文件的作用,解决的方法也比较粗暴,就是把报错的地方屏蔽了。因为我看之前辉姐有这么尝试过。屏蔽后,该问题不出现。
但是,又爆了另外一个错误:ticon库里面有了多重定义。我们使用链接参数--allow-multiple-definition解决了此问题,就是说如果出现了多重定义,那么连接的时候,我只需链接第一个找到的接口就行了。
至此,dkm.out在deltaos-IDE中生成成功。但注意:链接的ticon库仍使用他们给的使用diab编译的库。因此,我们把它放到deltaos下运行,但仍然报了有很多未定义但引用了的符号的问题。
我们假设diab和gnu编出来的中间文件是可以兼容并生成可执行文件的,报错很多未定义但引用了的符号,是因为我们的deltaos里面没有,而vxworks有的原因。那么现在的问题也就清晰了些,找到未定义引用的符号到底在哪里!
我们一直在找,最开始我们尝试对这些未定义引用的符号在vx6.9的source insight里面搜索,但是发现它们是c++符号,而c++符号编译器为了保证符号唯一性,对c++符号做了处理,导致和源码完全没法对应上。后面我们发现了一个工具c++filt,但不好用。而后又发现nm工具,发现只要在他后面加上参数—demangle,就可以看到他在源码里面的符号,因此我们分别使用:nm -n vxworks和 nm -n --demangle vxworks,从而得到了未定义引用符号和其匹配的源码符号。
但现在问题又来了,即使找到了可匹配的源码符号,但是我们在vx6.9里面很多都根本搜不到啊!最后发现在客户给我们的partialImage.o里面有,但我们并不知partialImage.o有什么用!只知道他是用于生成ctdt.c的。我想尝试分析构建信息,知道partialImage.o是通过哪些库和文件生成的,但问题是客户给我们的项目在vx6.9一直构建不成功。
静下心,好好想想一个符号可能来自哪些地方?
从底层来讲,程序要运行,所有的符号都应该映射到内存的某个地址。
从应用程序来讲,他可能存在于驻留于内存的几个程序或者动态库中。那dkm找不到的符号,肯定没在dkm中,而驻留在内存的只有dkm和vxworks,或者dkm和deltaos。很显然,这些未定义引用符号,vxworks有,而deltaos没有。vxworks由什么组成:项目本身源码,bsp,以及各种各样的库,亦或者是内建函数?通过搜索项目和bsp,没有,排除掉!再搜索vx6.9源码,也没有。奇了怪了!
好吧,不管了,至少partialImage.o里面有。最后,决定简单粗暴地把partialImage.o链接到deltaos里面去,然后修改了一系列编译链接错了,最终生成了deltaos.elf文件,但这个操作系统没法跑起来,解决失败。
似乎走进了死胡同,但还好又发现了一个问题,有可能客户所说的他们用的是vx6.9是错的。该项目可能需要用vx6.8编译。因为之前把该项目导入vx6.9时曾报过提示警告,但是当时没有注意,现在想来,可能客户说错了。对,至少我们应该用vx6.8编译该vxworks项目来试一下。如果能编译成功,我们就能看到partialImage.o的构建信息,更重要的是,也许vx6.8源码里,就能找到那些未定义引用的符号了呢?
事实证明,客户用的是vx6.8,所有的符号都在vx6.8里面找到了,通过vxworks链接的库,我们也知道了这些未定义符号存在于哪些库中,并链接了这些库到deltaos中,对于还是找不到符号的,我们还在symtbl.c中添加。
最后,客户同意并把ticon的库用gnu工具链重新编译了一下。然后就过了。。。。
这说明,不同工具链间交叉使用还是存在问题,主要是你连接的库都不一样,还有语法规则。特别是C++,对工具链的相关性更为明显。
反思:
其实在此次解决问题的过程中,我们大多是通过构建信息,运行错误,以及elf的反汇编来得到信息。但因为对elf格式不熟悉,以及binutils工具不熟悉,导致花费了些时间,这是我需要加强的地方。
如果你想快速解决一个问题,那么你至少应该具有快速分析及整合已有信息的能力,并找到突破口,步步为营,按逻辑思考,才可慢慢接近真相。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容