qt編譯的dll檔案有3個基礎依賴
libgcc_s_dw2-1.dll
,libstdc++-6.dll
和libwinpthread-1.dll
libgcc_s_dw2-1.dll
是c的依賴
libstdc++-6.dll
是c++的依賴
libwinpthread-1.dll
是libstdc++-6.dll
的依賴
編譯.cpp
的話就有上訴三個需要依賴的玩意兒
編譯.c
的話就只有libgcc_s_dw2-1.dll
乙個玩意兒
但是要做出來的介面要讓其他沒有這些依賴的環境去用的話,就必須靜態編譯進去
就可以使用qmake_lflags += -static
這樣就可以靜態編譯,但是也有別的***
單獨消除的話就qmake_lflags += -static-libstdc++ -static-libgcc
因為libwinpthread-1.dll
是libstdc++-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 執行緒裡並訪問介面
一 前言 眾所周知,只要涉及介面開發,都有一句話 禁止在子執行緒裡增刪改查介面。也就是所謂的 主線程更改介面,子執行緒做運算。有時候發現執行緒不能改變介面是非常不方便的,而上面的兩句話也只是 原則上 也就是說其實是可以的。至於有後果 個人推測 所以本文的投機取巧要慎用,反正我不管衝了!二 舉例 我做...