VS (Qt MFC)常見編譯問題

2021-10-07 20:34:03 字數 1565 閱讀 6218

這種微軟的警告,主要因為那些c庫的函式,很多函式內部是不進行引數檢測的(包括越界類的),微軟擔心使用這些會造成記憶體異常,所以就改寫了同樣功能的函式,改寫了的函式進行了引數的檢測,使用這些新的函式會更安全和便捷。關於這些改寫的函式你不用專門去記憶,因為編譯器對於每個函式在給出警告時,都會告訴你相應的安全函式,檢視警告資訊就可以獲知,在使用時也再檢視一下msdn詳細了解。庫函式改寫例子:

mkdir改寫為 _mkdir

fopen」改寫為 fopen_s

stricmp改寫為 stricmp_s

sprintf改寫為sprintf_s

strcpy改寫為strcpy_s

1、vs2005後使用帶「_s」字尾的非標準函式,如sprintf改為sprintf_s

char filename[1024];//需要預先分配緩衝區

char path1[128] = "d:\\program\\tesseract-ocr\\tesseract.exe";

char path2[128] = "d:\\program\\tesseract-ocr\\";

//sprintf(filename, "%s %s", path1,path2);

sprintf_s(filename, sizeof( filename ), "%s %s", path1,path2);

2、專案屬性->配置屬性->c/c++ ->預處理器(preprocessor)->預處理器定義(preprocessor definitions)

新增_crt_secure_no_deprecate和_scl_secure_no_deprecate這兩個巨集。

在vs2013以後的版本中,增加了inet_pton()、inetpton()之類的新函式,用於ip位址在「點分十進位制」和「二進位制整數」之間轉換,並且能夠處理ipv4和ipv6。而inet_addr是老函式,高版本vs在編譯時預設使用了新函式,所以會報該錯誤。

1、用所提示的inet_pton新函式代替inet_addr函式。

#include ... ...

= inet_addr(ip);

inet_pton(af_inet, ip, &sockaddr.sin_addr);

2、修改vs配置如下(兩種):

a、專案 -> 屬性 -> c/c++ ->常規(general)->sdl檢查(sdl checks),將「是(yes)」改為「否(no)」,即可使用老函式。

b、專案屬性->配置屬性->c/c++ ->預處理器(preprocessor)->預處理器定義(preprocessor definitions)

新增「_crt_secure_no_warnings」

引用依賴release的庫,對debug不相容,在debug模式下無法編譯通過

更換成release模式編譯,或者更換相應庫

使用的qt版本不對導致。

替換對應qt版本的庫

Xcode 常見編譯問題

1 引用 include 報錯 3 公升級到xcode9.3之後,大括號裡宣告的屬性,在block裡面就會出現block implicitly retains self explicitly mention self to indicate this 的警告,大量這樣宣告的屬性,產生了大量的黃色警告...

Qt常見編譯問題

qt在嵌入式開發中經常遇到沒有頭緒的錯誤提示,有的時候很難找到問題的所在,就我目前這兩天遇到的問題做乙個小總結,如下 setdevinfraweb.o in function setdevinfraweb setdevinfraweb setdevinfraweb.cpp text 0x38 und...

交叉編譯常見問題

1 新增環境變數 網上的解決辦法很多 2 找不到編譯器 在用交叉編譯器時遇到的問題 解決了 su 輸入密碼,這樣就進入了root使用者許可權,這個時候再輸入下面命令 source etc profile 結果問題就解決了 最後查詢su 和sudo 的區別,終於理解了,原來是工作環境的問題。希望此貼以...