一般原因
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\