原 gcc編譯器強別名導致的問題

2022-07-30 14:12:13 字數 375 閱讀 7514

系統:ubuntu14.04

編譯器:gcc4.8.2

問題描述:工作需要,使用libnids,所以就下了最新版本的1.24,編譯安裝後,發現tcp報文重組工作無法完成,具體表現為雖然通過nids_register_tcp函式註冊了**函式,但函式一直不能被執行,通過對libnids執行流程的跟蹤,發現在計算checksum的時候出了問題,checksum的值一直不為零,導致libnids認為資料報損壞.

不明所以,但通過思考,覺得問題應該處在編譯器上,是不是64位和32為的問題呢?原始碼中並沒有使用long等可能導致問題的資料型別呀.最終確定是由編譯器強別名機制導致的問題。

解決方案:編譯時加上-fno-strict-aliasing選項

可參考的一些連線:

gcc 編譯器和g 編譯器 幾個注意的問題

那麼在編譯的時候需要加入 lm 的選項,如果不加 lm 可能會報錯。gcc o test test.c lmgcc 編譯檔案字尾為.c的檔案時,編譯成編譯成c語言,編譯檔案字尾為.cpp的檔案時,編譯成c 語言。g 編譯.c cpp檔案時,只編譯成c 語言。gcc編譯字尾為.c的檔案有更少的預定義巨...

gcc編譯器的鏈結 裝載問題

gcc是一款linux系統上普遍使用的輕便型 編譯工具,在bash shell下通過命令列操作可完成程式 的編譯 彙編 鏈結工作。gcc基本編譯指令格式如下 gcc o executefile sourcefile.c l 庫檔案路徑 l 動態庫名字 i 標頭檔案路徑 編譯時,gcc按照從右向左的順...

GCC編譯器的使用

看下面的例子 test.c include main char str i like linux i advices you jion in the linux world printf s n str exit 0 使用gcc編譯 輸入gcc c test.c得到目標檔案test.o。c命令表示對...