error: undefined reference to ***

一般原因

1. 沒有指定對應的庫(.o/.a/.so)
使用了庫中定義的實體,但沒有指定庫(-lXXX)或者沒有指定庫路徑(-LYYY),會導致該錯誤。
Linux下文件的類型是不依賴於其後綴名的,但一般來講:
.o,是目標文件,相當於windows中的.obj文件
.so 爲共享庫,是shared object,用於動態連接的,和dll差不多
.a爲靜態庫,是好多個.o合在一起,用於靜態連接

2.連接庫參數的順序不對
在默認情況下,對於-l 使用庫的要求是越是基礎的庫越要寫在後面,無論是靜態還動態。

3.版本不匹配
例如在32位環境不小心使用了64位的庫或者反過來64位環境使用了32位的庫。

參考鏈接:https://www.cnblogs.com/siikee/articles/4250671.html

一個栗子

舉例:

error: undefined reference to `pcl::visualization::CloudViewer::~CloudViewer()'

解決:
在/usr/lib中找到pcl/visualization/cloud_viewer.h對應的庫,添加進.pro文件的鏈接庫列表中

LIBS += /usr/lib/libpcl_visualization.so.1.7\
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章