jrtplib版本是3.10.0,cmake版本3.7.2,cmake使用的編譯器(Native Compilers)是Visual Studio 14 2015(v140),IDE版本是Microsoft Visual Studio Community 15.
這兩天研究jrtplib的編譯和使用,本身在Console控制臺(tái)環(huán)境下已經(jīng)通過(guò)了。但是將jrtplib聯(lián)立到MFC中,則出現(xiàn)了死活編譯不過(guò)的情況。大致的報(bào)錯(cuò)如下:
> jrtplib_d.lib(rtPRandomrands.obj) : error LNK2019: 無(wú)法解析的外部符號(hào) __imp__rand_s,該符號(hào)在函數(shù) "public: virtual unsigned char __thiscall jrtplib::RTPRandomRandS::GetRandom8(void)" (?GetRandom8@RTPRandomRandS@jrtplib@@UAEEXZ) 中被引用> jrtplib_d.lib(rtprandom.obj) : error LNK2019: 無(wú)法解析的外部符號(hào) __imp___getpid,該符號(hào)在函數(shù) "public: unsigned int __thiscall jrtplib::RTPRandom::PickSeed(void)" (?PickSeed@RTPRandom@jrtplib@@QAEIXZ) 中被引用> msvcrtd.lib(_chandler4gs_.obj) : error LNK2019: 無(wú)法解析的外部符號(hào) __except_handler4_common,該符號(hào)在函數(shù) __except_handler4 中被引用在MFC工程中,我確定正確設(shè)置了附加依賴(lài)庫(kù)和庫(kù)路徑位置,因此只可能是jrtplib本身的編譯存在問(wèn)題。
經(jīng)查閱資料,發(fā)現(xiàn)主要是MFC底層依賴(lài)了libcmt.lib(Release)/libcmtd.lib(Debug)和msvcrt.lib(Release)/msvcrtd.lib(Debug)庫(kù),jrtplib代碼生成的運(yùn)行庫(kù)類(lèi)型和MFC不一致導(dǎo)致。因此,主要采用了兩步解決了以上鏈接問(wèn)題。
忽略默認(rèn)庫(kù)。 打開(kāi)cmake生成jrtplib項(xiàng)目下的jrtplib-static工程屬性,選擇“配置屬性”->“庫(kù)管理器”->“常規(guī)”->“忽略特定默認(rèn)庫(kù)”,填充libcmt.lib;libcmtd.lib;msvcrt.lib;msvcrtd.lib;調(diào)整代碼生成運(yùn)行庫(kù)類(lèi)型。打開(kāi)cmake生成jrtplib項(xiàng)目下的jrtplib-static工程屬性,選擇“C/C++”->“代碼生成”->“運(yùn)行庫(kù)”,選擇“多線程(/MT)”,與MFC的運(yùn)行庫(kù)類(lèi)型保持一致。然后生成項(xiàng)目(ALL_BUILD),安裝(INSTALL),exampleX的5個(gè)項(xiàng)目可能會(huì)出問(wèn)題,不用管他們,如果需要可以手動(dòng)修改各自的代碼生成運(yùn)行庫(kù)類(lèi)型為/MT。
再導(dǎo)入到MFC項(xiàng)目中就正常啦。
PS. 如果編譯jrtplib時(shí)沒(méi)有選擇jthread,MFC項(xiàng)目里實(shí)際用的時(shí)候也不用鏈接jthread.lib。
| 
 
 | 
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注