[英]Eclipse CDT Link Options -static-libgcc -static-libstdc++ Not Affecting Behavior on Windows
我是Java程序員,但我正在為自己要做的項目(JNI)自學一些C ++。 為此,我使用Eclipse和MinGW GCC用C ++用非常簡單的DLL測試程序編寫了一個非常簡單的DLL。 嘗試在Windows 7(以及我擁有的任何其他版本)上運行測試程序時,出現錯誤libgcc_s_dw2-1.dll丟失。 在閱讀了SO上的其他問題之后,我發現了有關-static-libgcc和-static-libstdc ++鏈接器選項的信息,這些選項已添加到項目設置中。 在我添加靜態選項之前,DLL和exe的文件大小很小,而在添加了靜態選項之后,DLL和exe的文件大小要大得多,這使我相信DLL的實際存在。 但是,嘗試運行該程序時,我仍然遇到丟失的DLL錯誤。 如果我將DLL復制到exe所在的文件夾,則它將運行。 我讀了一些建議,說應該只單獨分發DLL,但這遠非理想,我想盡可能避免它。
我也嘗試僅使用-static鏈接器選項,但由於某些原因,當我這樣做時,編譯器無法找到我的簡單DLL。 如果我刪除-static,它可以再次找到它。 我不確定這是怎么回事,但也許與整個問題有關?
我已經閱讀了有關該主題的所有資料,似乎我在做正確的事,並且DLL正在靜態鏈接到exe,但在運行時沒有效果。 我機智。 任何建議將不勝感激。
謝謝,巴勃羅
更新1我想我還不太清楚。 問題是,即使我將它們靜態鏈接,Windows都說缺少C庫。 當我運行構建時,這些是正在運行的compile和linker命令:
g++ "-IC:\\_projects_eclipse\\bcsdll\\src\\" "-includeC:\\_projects_eclipse\\bcsdll\\src\\bcsdll.h" -O0 -g3 -Wall -c -fmessage-length=0 -o Main.o "..\\Main.cpp"
g++ "-LC:\\_projects_eclipse\\bcsdll\\Debug" -Wl,-enable-stdcall-fixup -static-libgcc -static-libstdc++ -o bcsdll_tester.exe Main.o -lbcsdll
問題是,即使我在運行EXE時靜態地同時包含兩個C庫,我仍然會遇到C庫缺少DLL錯誤的情況。 當我使用Dependency Walker檢查EXE和DLL時,它清楚地表明對這兩個C庫沒有依賴關系。 但是,當我運行EXE窗口時,卻說缺少C ++庫。 如果我將庫的副本與DLL和EXE放在同一文件夾中,則程序運行正常。
實際缺少的DLL是libgcc_s_dw2-1.dll。 如果我將該DLL的副本放在EXE文件夾中,則缺少的DLL是libstdc ++-6.dll。
好的,我終於解決了這個問題。 我改用-static而不使用特定的-static-libgcc和-static-libstdc ++選項。 當我這樣做時,我的EXE編譯開始給我錯誤,即使它仍然在同一地方,它也找不到我的hellodll。 進行了更多谷歌搜索,我發現我需要編譯該庫以.a或.so(而不是.dll)結尾。 在Eclipse CDT中四處尋找,我在C / C ++ Build / Settings / Build Artifact選項卡下發現Artifact Type設置為“ Shared Library”。 我將其切換到靜態庫,編譯了DLL,重新編譯了EXE,然后一切正常。
對於使用eclipse for c / c ++但運行* .exe文件並顯示錯誤的Windows用戶很有用:“缺少libstdc ++ 6.dll”
4種解決方法
Eclipse->“項目”->“屬性”->“ C / C ++構建”->“設置”->“工具設置”->“ MinGW C ++鏈接器”->“其他”->“鏈接器標志”(添加“靜態”)
將“ {{您的MinGW的安裝路徑}} / bin添加到當前的用戶環境變量-Windows中的“路徑”,然后重新啟動Eclipse,最后重新編譯。
將“ {{安裝MinGW的路徑}} / bin添加到Windows環境變量-“路徑”,然后重新啟動Eclipse,最后重新編譯。
將文件“ libstdc ++-6.dll”復制到運行* .exe文件的路徑,然后重新運行。 (這不是一個好方法)
注意:文件“ libstdc ++-6.dll”位於文件夾“ {{您的MinGW的安裝路徑}}} / bin中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.