日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Undefined Reference to Typeinfo

發(fā)布時(shí)間:2024/2/28 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Undefined Reference to Typeinfo 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)載自:http://richardustc.github.io/blog/2013/07/undefined-reference-to-typeinfo/


在項(xiàng)目中遇到了這樣一個(gè)問題:C++文件編譯都OK,但鏈接的時(shí)候報(bào)錯(cuò):undefined reference to `typeinfo for xxx’。typeinfo是C++中的RTTI(RunTime Type Identification)機(jī)制中記錄類型信息用的,dynamic_cast和typeid操作符會(huì)使用這些信息。

以”undefined reference to typeinfo”為關(guān)鍵字在網(wǎng)絡(luò)上搜索,大多數(shù)都是說有虛函數(shù)定義了但是未實(shí)現(xiàn)導(dǎo)致的。但是我的代碼顯然不是這個(gè)情況。在我即將放棄的時(shí)候,終于在StackOverflow上發(fā)現(xiàn)有人提出,這種錯(cuò)誤的原因也可能是混合使用了帶RTTI信息和不帶RTTI信息的代碼導(dǎo)致的。對(duì)比檢查,發(fā)現(xiàn)我的項(xiàng)目里的問題正是這個(gè)。最后用了一點(diǎn)dirty hack,解決了bug。下面就仔細(xì)分析一下”undefined reference to `typeinfo for xxx’“產(chǎn)生的原因。

虛函數(shù)未實(shí)現(xiàn)

產(chǎn)生”undefined reference to `typeinfo for xxx’“最常見的原因就是基類的虛函數(shù)未實(shí)現(xiàn)了。由于C++類的實(shí)現(xiàn)可以分布在多個(gè)源文件中,所以生成目標(biāo)文件時(shí),基類的虛函數(shù)沒有定義是不會(huì)報(bào)錯(cuò)的。但是鏈接成可執(zhí)行文件時(shí),需要將虛函數(shù)的信息放進(jìn)typeinfo中,這個(gè)時(shí)候虛函數(shù)未實(shí)現(xiàn)就會(huì)引發(fā)這個(gè)錯(cuò)誤。

混用了no-RTTI代碼和RTTI代碼

我碰到的正是混用了no-RTTI和RTTI代碼的情形。項(xiàng)目中我們自己寫的程序必須開啟RTTI,而我們使用的外部的一個(gè)庫(kù)使用no-RTTI編譯。我們?cè)谧约旱拇a中需要重載一個(gè)外部庫(kù)中的帶虛函數(shù)的類,結(jié)果鏈接的時(shí)候就出現(xiàn)了問題。外部庫(kù)中的基類使用-fno-rtti選項(xiàng)編譯,生成的代碼沒有typeinfo信息,而我們的代碼使用-frtti選項(xiàng)編譯,要求基類必須要有typeinfo信息。最后,我在編譯系統(tǒng)中做了一些dirty hack,讓那個(gè)派生類所在的源文件以-fno-rtti選項(xiàng)編譯,解決了問題。

----------------------------------------------------------------

我遇到的問題類似,現(xiàn)在的項(xiàng)目中需要開啟RTTI,鏈接的外部庫(kù)是no-RTTI編譯的,在現(xiàn)在的工程中重載外部庫(kù)的帶虛函數(shù)的類,連接的時(shí)候報(bào)錯(cuò).原文說的dirty hack,是對(duì)單個(gè)文件加編譯選項(xiàng)-fno-rtti 。因?yàn)?/span>我用的外部庫(kù)是可以開啟RTTI的,我用RTTI重新編譯一次后,現(xiàn)在的工程不報(bào)錯(cuò)啦。

總結(jié)

以上是生活随笔為你收集整理的Undefined Reference to Typeinfo的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。