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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Qt中undefined reference to报错的三种可能性和解决方法(以libgdal为例)

發(fā)布時(shí)間:2023/12/16 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt中undefined reference to报错的三种可能性和解决方法(以libgdal为例) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

有一段代碼很久沒動(dòng)了,今天想跑起來編譯看看,突然發(fā)現(xiàn)出現(xiàn)一堆報(bào)錯(cuò),如下:

好吧,首先我能保證的是,有之前調(diào)試代碼過程中,這些報(bào)錯(cuò)一定是沒有出現(xiàn)的。最近也沒什么動(dòng)作,怎么就忽然就出現(xiàn)了。
不管怎么說,解決問題是關(guān)鍵。
單純這個(gè)報(bào)錯(cuò)內(nèi)容來看,很典型的undefined reference to的報(bào)錯(cuò),這個(gè)報(bào)錯(cuò)在調(diào)用第三方庫的編程中,簡直是家常便飯,代表的含義也很明確,就是找不到函數(shù)的定義。
用C++寫代碼的都知道,在C++中,代碼是分為聲明和定義的,聲明就是告訴編譯器有這個(gè)函數(shù),換言之,就是個(gè)名字,而定義,就是具體這個(gè)函數(shù)的實(shí)現(xiàn)內(nèi)容。
類似這個(gè)報(bào)錯(cuò)的,還會(huì)有一種報(bào)錯(cuò)是undeclared的報(bào)錯(cuò),這大概就是函數(shù)聲明的報(bào)錯(cuò)。
言歸正傳,undefined reference to的報(bào)錯(cuò)一般怎么處理

  • 應(yīng)該首先想到是不是沒有對(duì)應(yīng)的庫文件,于是我去/usr/local/lib目錄下找libgdal.so.26,能找到。
  • 如果庫文件在,那也可能是Qt沒找到這個(gè)庫,那就手動(dòng)外部導(dǎo)入庫試試,發(fā)現(xiàn)沒用。
    當(dāng)發(fā)現(xiàn)上述兩點(diǎn)都不是原因之后,說明從這里能獲取的報(bào)錯(cuò)信息就不足以解決這個(gè)問題了,于是,這個(gè)時(shí)候,就把目光轉(zhuǎn)移到編譯輸出的那個(gè)tab頁中,查找蛛絲馬跡。然后就發(fā)現(xiàn)了問題的關(guān)鍵。在編譯輸出的內(nèi)容中,有這樣的報(bào)錯(cuò)
  • /usr/bin/ld: warning: libxerces-c-3.2.so, needed by /usr/local/lib/libgdal.so.26, not found (try using -rpath or -rpath-link) /usr/bin/ld: warning: libnetcdf.so.15, needed by /usr/local/lib/libgdal.so.26, not found (try using -rpath or -rpath-link) /usr/bin/ld: warning: libhdf5_serial.so.103, needed by /usr/local/lib/libgdal.so.26, not found (try using -rpath or -rpath-link) /usr/bin/ld: warning: libogdi.so.4.1, needed by /usr/local/lib/libgdal.so.26, not found (try using -rpath or -rpath-link) /usr/bin/ld: warning: libCharLS.so.2, needed by /usr/local/lib/libgdal.so.26, not found (try using -rpath or -rpath-link) /usr/bin/ld: warning: libgeotiff.so.5, needed by /usr/local/lib/libgdal.so.26, not found (try using -rpath or -rpath-link) /usr/bin/ld: warning: libcfitsio.so.8, needed by /usr/local/lib/libgdal.so.26, not found (try using -rpath or -rpath-link)

    問題就明顯了,缺少了很多的libgdal的依賴庫,這個(gè)就讓我很摸不著頭腦了,明明之前沒有這些報(bào)錯(cuò),說明依賴都沒問題的,怎么突然就出現(xiàn)問題了。我認(rèn)真回憶了一下,懷疑可能是在卸載別的軟件的時(shí)候,利用sudo apt autoremove時(shí),把一些依賴給誤刪了。
    問題是很好解決的,就是把缺的依賴再給他裝上去就好了,特別提醒一下,別的依賴都好找,直接sudo apt install XXXXX多試幾回,基本也就找到了,這其中有兩個(gè)庫不是很好找,libmfhdfaltlibdfalt,這兩個(gè)庫需要安裝libhdf4-alt-dev來解決。
    那么總結(jié)一下,出現(xiàn)undefined reference to報(bào)錯(cuò)的可能原因有三條:

  • 沒有這個(gè)庫文件。
  • 庫文件有,但是Qt找不到他的位置。
  • 這個(gè)庫文件的依賴丟失。
  • 總結(jié)

    以上是生活随笔為你收集整理的Qt中undefined reference to报错的三种可能性和解决方法(以libgdal为例)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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