1. 程式人生 > >VS2017 Linux C++引用自定義的動態庫

VS2017 Linux C++引用自定義的動態庫

++ -1 undefined mage 編譯運行 linux下 lin 套路 log

前一篇博客講了用系統庫libpthread.so的例子,只需要在項目屬性頁的[C++->命令行參數]和[鏈接器->命令行參數]中加上對應參數(比如-pthread)即可,然後我試著引用自己的庫(libTLPI.so,放在/lib目錄下),然後在命令行參數後面加上-lTLPI,發現無法引用自定義的動態庫,undefined reference錯誤。

在網上找了很久,都沒找到解決方案,最後還是官方周到,在VS首頁的教程中就有

技術分享

因為之前配置過opengl,所以立刻看出來GL、GLU、glut代表的是opengl的三個.so文件(libGL.so、libGLU.so、libglut.so),然後我就發現被VS的描述坑了

技術分享

我還以為這裏的庫依賴項只能輸入靜態庫呢,原來是我一時眼快……前綴為lib的就是動態庫libxxx.so,我第一眼還以為是windows的靜態庫xxx.lib,因為以前配置opencv的時候套路都是在[鏈接器->輸入]中輸入靜態庫(*.lib文件)的名字,然後動態庫(*.dll)直接通過環境變量來查找。

而遠程調試Linux的話,動態庫libxxx.so和靜態庫xxx.a都是在[鏈接器->輸入]裏配置(囧)

於是,在[C++->命令行參數]、[鏈接器->命令行參數]中也不必要去加-lTLPI選項了。

技術分享

技術分享

最後精簡了代碼,編譯運行成功,到了這一步終於可以用VS完全取代Linux下直接開發了(也不盡然,遠程操控相比本地直接用命令編譯速度還是慢點的)

技術分享

VS2017 Linux C++引用自定義的動態庫