64位平台編譯常見問題彙總(個人移植問題僅供參考)

2021-08-27 09:25:12 字數 2132 閱讀 4412

這個問題在資料《32位程式移植到64位平台前的準備工作 》中有提及到。以下是文章中的內容:

涉及隱式函式宣告,如果沒有對**中呼叫的每乙個函式提供乙個原型,編譯器就會做出假設。編譯器產生的類似警告資訊"implicit function declaration: assuming extern returning int"在32位構建時通常是無關緊要的;但在64位構建時,這種返回值是int的假設,當函式實際上是返回long或指標(例如malloc)時,就會導致真正的問題了。為了不讓編譯器做出這種假設,必須確保所有需要的系統標頭檔案都包含或提供了外部函式的函式原型。

在mds**中所涉及到的**段如下:

在sipcc.c檔案6536行中,在呼叫下面函式時會出現警告資訊

if (strncmp(p->route, (char *)antpickupext(), strlen((char *)antpickupext())))

原因:antpickupext()返回值為char *型,並未在標頭檔案中宣告,在64為編譯中函式返回值預設為int型。

修改的話,在標頭檔案中增加函式宣告。

mds產品**中,將整數強轉成void *指標,作為引數傳遞給函式使用。在跨平台移植中,可能會出現問題。修改的話,直接傳送整數的位址。在函式實現**中,再進行型別強轉後取其值。如下:

int trunkid

-pthread_create(&offnet_callee_ptr->pingthread, &attr, iptrunksendrawpingtopeer, (void *) trunkid);

+pthread_create(&offnet_callee_ptr->pingthread, &attr,iptrunksendrawpingtopeer, (void *) &trunkid);

void *iptrunksendrawpingtopeer(void *data)

下面是產品**中的乙個例子:

結構體定義 1

2345

6789

1011

12structant_translator;

初始化: 1

2345

6789

staticstructant_translatorg729tolin=;

警告:從不相容的指標型別初始化

未確定:

上面警告資訊對程式有沒有影響,有何影響還不確定?

如果想排除警告資訊,可按照以下方法進行修改。

static struct ant_translator lintog723 = ;

編譯是出現以下警告:(在**中大概有三處吧)

警告:傳遞引數

6 (屬於

『recvfrom』)

給指標時目標與指標有

/無符號不一致。

示例:int fromlen;

fromlen = sizeof from;

h->resp_len = recvfrom(h->fd, h->response,

msgsize, msg_waitall, (struct sockaddr *)&from, &fromlen);

去除警告資訊的話,是將

fromlen

型別定義為

: socklen_t

。其他如

size_t

也會有警告。

在編譯過程中出現這種警告:'argument' : conversion from 'size_t' to 'int', possible loss of data警告:當將乙個指標轉換為大小不同的整數時給出警告。

inet_ntoa()返回的就是char *,如果在linux出現上述警告,就是沒有加上包含這個函式的標頭檔案在linux上為#include

在編譯過程中出現這種警告:

'argument' : conversion from 'size_t' to 'int', possible loss of data

警告:當將乙個指標轉換為大小不同的整數時給出警告。 原因

:未加標頭檔案

#include.

在64位編譯是不加標頭檔案 不報錯誤,居然報個指標轉換為大小不同的整數時給出警告?讓人費解,有了解大俠給解下疑惑?

xsocks 64位平台下編譯問題小記

1 src common public.h uint32 t lpparameter 改為 void lpparameter 2 socksmgr.cpp dword winapi csocksmgr forwardproc void lpparameter 編譯不過去。因為在 64位平台下,voi...

32 位和 64 位 Windows 常見問題

以下是有關 32 位和 64 位版本 windows 的一些常見問題的解答。32 位和 64 位版本 windows 之間有什麼區別?術語 32 位 和 64 位 是指計算機的處理器 也稱為 cpu 處理資訊的方式。64 位版本的 windows 可處理大量的隨機訪問記憶體 ram 其效率遠遠高於 ...

直播平台開發搭建常見問題彙總

直播平台開發的重點在於功能設計,以及如何優化提公升後期直播平台的使用者直播體驗,從整個直播平台開發到搭建部署 封裝上架,有很多常見的問題是需要我們關注的。我們就來彙總整理下。1.直播平台cdn是如何計費的?2.直播平台搭建部署需要準備哪些內容?3.蘋果開發者賬號相關問題 4.安卓端的開發工具 and...