QT編寫純C介面,並解除依賴

2021-10-09 07:15:59 字數 1327 閱讀 7259

qt編譯的dll檔案有3個基礎依賴

libgcc_s_dw2-1.dll,libstdc++-6.dlllibwinpthread-1.dll

libgcc_s_dw2-1.dll是c的依賴

libstdc++-6.dll是c++的依賴

libwinpthread-1.dlllibstdc++-6.dll的依賴

編譯.cpp的話就有上訴三個需要依賴的玩意兒

編譯.c的話就只有libgcc_s_dw2-1.dll乙個玩意兒

但是要做出來的介面要讓其他沒有這些依賴的環境去用的話,就必須靜態編譯進去

就可以使用qmake_lflags += -static

這樣就可以靜態編譯,但是也有別的***

單獨消除的話就qmake_lflags += -static-libstdc++ -static-libgcc

因為libwinpthread-1.dlllibstdc++-6.dll的依賴,所以要特殊些

64位:

qmake_lflags += -static-libgcc -static-libstdc++ -wl,-bstatic -lstdc++ -lpthread -wl,-bdynamic

qmake_lflags += -static-libgcc -static-libstdc++ -wl,-bstatic -lstdc++ -lgcc_eh -lpthread -wl,-bdynamic

32位:

qmake_lflags += -static-libstdc++ -static-libgcc -wl,-bstatic,--whole-archive -lwinpthread -wl,--no-whole-archive -wl,-bdynamic

32位的解決方法感謝這個作者

補充:預設情況下,對於未使用到的符號(函式是一種符號),鏈結器不會將它們鏈結進共享庫和可執行程式。

這個時候,可以啟用鏈結引數「–whole-archive」來告訴鏈結器,將後面庫中所有符號都鏈結進來,引數「-no-whole-archive」則是重置,以避免後面庫的所有符號被鏈結進來。

部分linux系統,程式需要依賴到pthread,但是提示沒有依賴到,是因為-lpthread要寫到gcc最後面

Qt 編寫DLL 並呼叫

一 編寫dll庫 1 新建專案 選擇c library 選擇share library 改類名 如hellowadd 下一步 2 增加add方法如下 ifndef hellowadd h define hellowadd h include qt lib shared hellow global.h...

Qt 編寫DLL 並呼叫

一 編寫dll庫 1 新建專案 選擇c library 選擇share library 改類名 如hellowadd 下一步 2 增加add方法如下 ifndef hellowadd h define hellowadd h include qt lib shared hellow global.h...

Qt開啟C 執行緒裡並訪問介面

一 前言 眾所周知,只要涉及介面開發,都有一句話 禁止在子執行緒裡增刪改查介面。也就是所謂的 主線程更改介面,子執行緒做運算。有時候發現執行緒不能改變介面是非常不方便的,而上面的兩句話也只是 原則上 也就是說其實是可以的。至於有後果 個人推測 所以本文的投機取巧要慎用,反正我不管衝了!二 舉例 我做...