之前一直在windows下做專案,現在要將專案移植到linux下,發現了很多問題,在此描述一些其中關於動態庫靜態庫問題。
在windows下,.pro檔案中配置 template
=lib,編譯時即可生成.lib和.dll兩個庫檔案。這裡假設有a、b、c三個模組,a依賴與b,b依賴於c,所以我們在編譯的時候就要先生成c模組庫的庫檔案,設為c***.lib和c***.dll兩個檔案,在b模組中鏈結c庫時,在.pro檔案中加入鏈結配置即可:
libs+=-lpath -lc*** #path是庫檔案c***.lib所在的路徑,不是.dll路徑
編譯b模組即可生成相應庫檔案b***.lib 和 b***.dll
在模組a的.pro檔案中做類似配置libs+=-lpath -lb***
編譯即可生成a模組的庫檔案a***.lib和 a***.dll+=-lpath -la*** 即可,如果還依賴於別的庫檔案,在後面新增 -l***
對於以上windows下的配置,在linux下卻是不行的。
首先,如果.pro檔案中配置 template=lib, 在linux中生成的只有共享庫.so,也就是所謂的動態庫檔案。可以看到動態庫檔案有多個.so .so.1 .so.1.0之類。如果只想要乙個.so檔案,.pro中可加入 config
+=plugin
若想生成靜態庫檔案,需要新增 config+=staticlib。
同樣是a、b、c三個模組,依賴關係和上面一樣,linux下只能用動態庫鏈結,使用靜態庫時總提示介面函式未定義。
使用動態庫時注意,在編譯a、b、c模組時,可以不執行鏈結操作,即無需新增必須將三個庫都鏈結上。libs
+=-lpath
-l***
libs
+=-lpath
-la*** -lb*** -lc***
qt動態鏈結庫so的生成與呼叫
linux下qt建立和呼叫共享庫檔案.so 費了點功夫,總算get了編寫共享庫 shared library,windows下稱為 動態鏈結庫 即dynamic link library 和呼叫的這個新技能!動態鏈結庫的好處是不言而喻的,乙個稍微複雜一點的程式,頂層設計的時候良好的類庫劃分可以讓工作...
QT學習》QT生成與呼叫共享庫
1.建立c 庫 1.1點選new project 1.2選擇庫模板 選擇 library 中的 c 庫 再點選 choose 1.3選擇共享庫 給共享庫取個名稱,並指定生成檔案存放路徑。再點選 下一步 1.4選擇編譯器 再點選 下一步 1.5選擇所需要的模組 預設選擇qtcore qtcore 模組...
Qt呼叫VC 生成的動態鏈結庫
qt如何呼叫vc 生成的動態鏈結庫?假設當前有vc 編譯器生成的動態庫檔案testdll.h,testdll.lib和testdll.dll。testdll.h檔案原始碼如下 ifdef testdll exports define testdll api declspec dllexport el...