CodeBlocks 16.01 升級到 CodeBlocks 20.03 后的一些感受


最近為了編寫64位的應用程序,我把 CodeBlocks 16.01 升級到 CodeBlocks 20.03

CodeBlocks 16.01 自帶的 gcc 是 tdm-gcc 4.9.2

CodeBlocks 20.03 自帶的 gcc 是 w64-mingw32-gcc 8.1.0

使用 CodeBlocks 20.03 自帶的 w64-mingw32-gcc 8.1.0 重新編譯過去寫的代碼,有很多新的代碼警告提示,竟然還找到了一處指針錯誤代碼(返回局部變量的指針),新版本的gcc確實很給力。

注意:編譯器由原來的 tdm-gcc 4.9.2 變成 w64-mingw32-gcc 8.1.0 后,編譯出來的應用程序運行時需要依賴3個dll文件

64位應用程序依賴3個dll文件分別是

libgcc_s_seh-1.dll
libwinpthread-1.dll
libstdc++-6.dll

 

32位應用程序依賴3個dll文件分別是

libgcc_s_dw2-1.dll
libwinpthread-1.dll
libstdc++-6.dll

 

由於以前用 tdm-gcc 好幾年,編譯生成的應用程序不需要依賴這3個dll文件,為了編譯出的應用程序不依賴這3外dll文件,我又嘗試下載了 tdm-gcc 9.2,官網下載:https://jmeubank.github.io/tdm-gcc/

 

下載后,為 CodeBlocks 20.03 配置好相關的編譯路徑后:

 

使用 tdm-gcc 9.2 重新編譯之前的代碼,直接報了多處錯誤提示:

 

然后編輯文件:TDM-GCC-9.2-32\include\sdkddkver.h

#ifndef _WIN32_WINNT
# ifdef WINVER
#  define _WIN32_WINNT WINVER
# else
#  ifdef _WARN_DEFAULTS
#   warning "Assuming default setting of _WIN32_WINNT_WIN2K for _WIN32_WINNT"
#  endif
#  define _WIN32_WINNT  _WIN32_WINNT_WIN2K
# endif
#endif

_WIN32_WINNT 默認是 _WIN32_WINNT_WIN2K,修改為: 0x0501  (win xp)

#ifndef _WIN32_WINNT
# ifdef WINVER
#  define _WIN32_WINNT WINVER
# else
#  ifdef _WARN_DEFAULTS
#   warning "Assuming default setting of _WIN32_WINNT_WIN2K for _WIN32_WINNT"
#  endif
#  define _WIN32_WINNT  0x0501
# endif
#endif

重新編譯,在快要編譯完成的時候,360 彈出安全對話框,說什么 collect.. 之類的存在安全風險。

嚇的我沒敢繼續。

 

我又想起 CodeBlocks  17.02 這個版本自帶的是 tdm-gcc 5.1,我又在另一台電腦上安裝了這個版本,然后提取 tdm-gcc 5.1,重新編譯的代碼,又提示這個錯誤:

關於這個錯誤,我有印像,以前也有,好像重新定義一個.h 文件中的宏定義就行了。

可我實在不想再改代碼了,就放棄了。

-----------------------------------------------------------------------------------------------------------------------

以后,就只使用 CodeBlocks 20.03 自帶的  w64-mingw32-gcc 8.1.0 來編譯吧,就算編譯出來的應用程序需要依賴那3個dll,但至少代碼這一塊我不需要改動太多,從代碼維護角度看,省心一些吧。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM