當前位置:首頁 » 編程軟體 » mingw編譯鏈接庫問題

mingw編譯鏈接庫問題

發布時間: 2023-09-14 05:26:33

『壹』 怎麼在mingw環境下編譯安裝poco庫

.vs編譯安裝的話,直接運行那些bat腳本就可以了,但MinGW肯定不行,所以需要用到MSYS
2.解壓poco-1.4.6p2,比如:D:/mysdk/poco-1.4.6p2,在MSYS的命令行中輸入「cd
/d/mysdk/poco-1.4.6p2」回車,就到了poco-1.4.6p2的解壓目錄了,具體你解壓的目錄路徑可以根據實際情況修改;

3.configure poco-1.4.6p2

linux裡面要配置編譯參數,我們可以通過「./configure
--help」查看有哪些編譯項。我們要使用MinGW編譯poco就必須在configure時指明是MinGW,我的configure命令如下(大家根據自己的實際情況修改):

./configure --config=MinGW --shared --static --no-test --no-samples
--omit=Crypto,NetSSL_OpenSSL,Data/ODBC,Data/Mysql

簡單解釋:--config=MinGW表示我採用MinGW編譯poco,--shared
--static表示編譯生成動態庫(dll)和靜態庫(a),omit=...表示編譯時不生成這些庫,因為我本機沒裝ssl、mysql,odbc需要lib,會影響我編譯,所以我去掉了這4個庫;

4.修改MinGW的編譯腳本

修改poco-1.4.6p2/bulid/config/MinGW,把「SYSLIBS = -L/usr/local/lib -L/usr/lib
-liphlpapi -lws2_32 -lssl -lcrypto -lws2_32 -lgdi32」里去掉「-lssl
-lcrypto」,因為我本機沒裝ssl,這個庫沒有,會影響編譯安裝;

5.make編譯

執行了上面的./configure
--config=......的命令後會生成一個config.make文件,然後輸入「make」並回車,就開始編譯安裝poco了,poco編譯過程會有一些提示錯誤,例如「poco-1.4.6p2/.../xxx.exe.exe:No
such file」,如果是的話就不用管他,繼續輸入make回車,他會繼續往下編譯,大概經過N次這樣的操作後,提示「make[1]:Nothing to be
done for 'all'.」的時候就編譯完了。

編譯完成後,在poco-1.4.6p2/lib/MinGW/ia32/目錄下就是編譯出來的靜態度和動態庫了。

『貳』 QT5.5 for vs2010,包含5.5的庫目錄QTWidgets、QTCORE、QTGUI。為什麼編譯會出現qt庫錯誤求解決方案

qt5.0.2forwindows32bit(mingw4.7)是使用mingw32環境+gcc4.7編譯而成的二進制動態鏈接庫版本。qt5.0.2forwindows32bit(vs2010)是使用VS2010的配置和windowssdk7.0所提供的編譯工具生成的用於VS2010的版本。其中mingw4.7版本自帶了編譯器。而vs2010版本必須要安裝VS2010才能使用。其實沒有vs只安裝windowssdk也可以,不過需要一個代替vs2010的配置工具集。你C++什麼水平啊?如果不是新手的話我建議你去檢查一下配置項,就是qtcreator的編譯環境配置是否把qt路徑配置進去了。如果你是新手,我暫時勸你放棄qt,沒有足夠的C++功底,想用Qt很困難的。

『叄』 MinGW怎樣設置動態鏈接庫的路徑

靜態庫和動態庫的區別
1.靜態庫

之所以稱之為"靜態庫",是因為在鏈接階段,會將匯編生成的目標文件.o與引用到的庫一起鏈接打包到可執行文件中。因此對應的鏈接方式稱為靜態鏈接。
從本質上來說,一個靜態庫可以簡單看成是一組目標文件(.o/.obj文件)的集合,靜態庫與匯編生成的目標文件(.o/.obj)一起鏈接為可執行文件。
靜態庫(後綴為.a/.lib)和.o文件格式相似。即很多目標文件經過壓縮打包後形成的一個文件
靜態庫特點總結:
1. 靜態庫對函數庫的鏈接是放在編譯時期完成的
2. 程序在運行時與函數庫再無瓜葛,移植方便,因為代碼已經嵌入到程序裡面了,可以直接跟著程序走,不存在對外部文件的依賴
3. 浪費空間和資源,因為所有相關的目標文件與牽涉到的函數庫被鏈接合成一個可執行文件,會增加原本程序的空間

GCC編譯、使用靜態庫
靜態庫的後綴是.a(並沒有強制規定),它的產生分兩步
1. 由源文件編譯生成一堆.o,每個.o里都包含這個編譯單元的符號表
2. ar命令將很多.o轉換成.a,成為靜態庫,從這點也可以看出來,庫是很多.o文件的集合

編譯好靜態庫文件之後,我們就可以在其他程序中使用靜態庫文件中的函數了
1. 只需要在使用到這些公用函數的源程序中包含這些公用函數的原型聲明(include對應的頭文件)
2. 然後在用gcc命令生成目標文件時指明靜態庫名
3. gcc將會從靜態庫中將公用函數連接到目標文件中
4. 注意,gcc會在靜態庫名前加上前綴lib,然後追加擴展名.a得到的靜態庫文件名來查找靜態庫文件,因此,我們在寫需要連接的庫時,只寫名字就可以,如libhello.a的庫,只寫: -lhello

2.動態庫

動態庫文件名命名規范和靜態庫文件名命名規范類似,也是在動態庫名增加前綴lib,但其文件擴展名為.so(.dll)。例如:我們將創建的動態庫名為myhello,則動態庫文件名就是libmyhello.so。
使用庫是重用代碼的一種絕佳方式。 您不必在自己創建的每個程序中重新實現同一常式,而只需對這些常式寫入一次,然後從需要該功能的應用程序引用它們即可。 通過將代碼放入 DLL,您節省在引用它的每個應用程序的空間,而且,您可以更新 DLL,而無需重新編譯所有應用程序。
動態鏈接庫 (DLL) 是作為共享函數庫的可執行文件。動態鏈接提供了一種方法,使進程可以調用不屬於其可執行代碼的函數。DLL 還有助於共享數據和資源。多個應用程序可同時訪問內存中單個 DLL 副本的內容。
動態鏈接與靜態鏈接的不同之處在於它允許可執行模塊(.dll 文件或 .exe 文件)僅包含在運行時定位 DLL 函數的可執行代碼所需的信息。在靜態鏈接中,鏈接器從靜態鏈接庫獲取所有被引用的函數,並將庫同代碼一起放到可執行文件中。
使用動態鏈接代替靜態鏈接有若干優點。DLL 節省內存,減少交換操作,節省磁碟空間,更易於升級,提供售後支持,提供擴展 MFC 庫類的機制,支持多語言程序,並使國際版本的創建輕松完成。

DLL 的類型
當您在應用程序中載入 DLL 時,可以使用兩種鏈接方法來調用導出的 DLL 函數。這兩種鏈接方法是載入時動態鏈接和運行時動態鏈接。
動態庫一般會有對應的導入庫,方便程序靜態載入動態鏈接庫,否則你可能就需要自己LoadLibary調入DLL文件,然後再手工GetProcAddress獲得對應函數了。有了導入庫,你只需要鏈接導入庫後按照頭文件函數介面的聲明調用函數就可以了。
載入時動態鏈接(load-time dynamic linking)
在載入時動態鏈接中,應用程序像調用本地函數一樣對導出的 DLL 函數進行顯式調用。要使用載入時動態鏈接,請在編譯和鏈接應用程序時提供頭文件 (.h) 和導入庫文件 (.lib)。當您這樣做時,鏈接器將向系統提供載入 DLL 所需的信息,並在載入時解析導出的 DLL 函數的位置。
運行時動態鏈接(run-time dynamic linking)
在運行時動態鏈接中,應用程序調用 LoadLibrary 函數或 LoadLibraryEx 函數以在運行時載入 DLL。成功載入 DLL 後,可以使用 GetProcAddress 函數獲得要調用的導出的 DLL 函數的地址。在使用運行時動態鏈接時,無需使用導入庫文件。

『肆』 c的編譯器mingw的問題

關鍵是你下載的那個mingw?通常不單獨下載mingw,聯合ide一起下載比較好。可以選擇codelite

單獨下載,推薦你在sf .net上搜索TDM-GCC MinGW Compiler。

如果你只是想用C語言,對C標准支持好的,應該選擇Pelles C

『伍』 編譯Qt 4.7.3在GCC 4.6 MinGW問題,怎麼解決

認真核操作步驟:
1、修改環境變數工具推薦:Rapid Environment Editor
修改前請先備份前環境變數:
(1)檢查系統變數path刪除關mingw其版本等信息免與續mingw32-make沖突
(2)檢查用戶變數INCLUDE、LIB、PATH、MSDevDirMSVCDir刪除關\Microsoft Visual Studio\VC98信息與續mingw32-make沖突導致編譯錯
2、????電腦安裝mingw編譯器假設路徑安裝C:\Qt\mingw32C:\Qt\mingw32\bin添加進環境變數path打DOS命令行輸入gcc --versiong++ --versionmingw32-make --version驗證編譯器安裝功我用MinGW版本V4.8.2
3、解壓qt-everywhere-opensource-src-4.8.6.zip並進入目錄例:D:\qt-everywhere-opensource-src-4.8.6\
4、依執行DOS命令:
(1)configure -debug-and-release -opensource -prefix "D:\Qt4.8.6" -platform win32-g++ -nomake demos -nomake examples
見使用選項說明:
-debug-and-release 編譯debugrelease版
-opensource 選擇源協議並確認
-platform win32-g++ 使用mingw編譯
-prefix "D:\Qt4.8.6" 指定編譯結目錄,未指定則默認前
-shared 創建使用共享Qt庫
-static 創建使用靜態Qt庫
-nomake demos -nomake examples 編譯常式
-nomake tests 編譯tests

-skip qtwebkit 忽略qtwebkit編譯特別消耗間

-mp 使用核優化編譯

(2)mingw32-make
(3)mingw32-make install
5、編譯完C:\Qt\mingw32\bin\路徑三文件libgcc_s_dw2-1.dll、libstdc++-6.dlllibwinpthread-1.dll拷貝D:\qt-everywhere-opensource-src-4.8.6\bin\另外請步驟1備份環境變數原
6、修改Qt安裝路徑
初編譯選擇路徑D:\Qt4.8.6\想復制其盤符並且改名例:C:\Qt\4.8.6_MinGW問題問題Qt絕路徑依賴症改名C:\Qt\4.8.6_MinGW\bin\exe執行程序都問題要程序打要語言發異用記事本打C:\Qt\4.8.6_MinGW\bin\qmake.exe查找關鍵字qt_prfxpath看面含原始安裝路徑我手修改qmake.exe真效解決:
C:\Qt\4.8.6_MinGW\bin\路徑創建qt.conf文件內容
[paths]
Prefix = C:/Qt/4.8.6_MinGW

請注意:qt.conf文件必須ANSI格式並且Prefix斜杠風格採取Linux非Windows否則失效或者使用"Prefix = .. "任意路徑效

『陸』 MinGw的g++編譯opengl程序時,鏈接不上,為什麼

點開始菜單-->運行,輸入cmd,彈出dos窗口,輸入命令setpath會列出你的環境變數,看裡面有沒有mingw,沒有的話肯定不能編譯了,添加環境變數。例如你的mingw裝在了D:\mingw\文件夾,那麼就要在環境變數path中添加D:\mingw\;這一句。如果環境變數中本來就有mingw,那麼請輸入gcc或g++-V,如果沒有,說明mingw確實壞了,請重新安裝。如果拒絕訪問的話,那麼有可能有別名,比如我的系統上是gcc-3.exe,gcc-4.exe可以用來編譯。怎麼添加環境變數?不細寫了,網路一下吧,因為windowsXP和win7稍有不同的。

熱點內容
微信清除朋友圈緩存 發布:2024-11-19 10:32:08 瀏覽:138
3ds編程 發布:2024-11-19 10:31:14 瀏覽:229
mac如何修改賬戶密碼變成普通用戶 發布:2024-11-19 10:23:05 瀏覽:875
接龍源碼 發布:2024-11-19 10:14:48 瀏覽:33
驅動軟體哪個安卓版好 發布:2024-11-19 10:08:28 瀏覽:703
伺服器一鍵搭建java環境 發布:2024-11-19 10:08:27 瀏覽:729
布丁少兒編程 發布:2024-11-19 09:57:11 瀏覽:98
vb資料庫數組 發布:2024-11-19 09:23:40 瀏覽:828
安卓游戲數據保存在哪裡找 發布:2024-11-19 09:22:02 瀏覽:310
解壓出來的文件亂碼 發布:2024-11-19 09:15:40 瀏覽:940