[make] *** does break strict-aliasing rulesのエラーが出たらの巻

スポンサーリンク

はーいヽ(*´∀`)ノ

今日はmakeをした時に遭遇したエラーを突破する方法を紹介します!

racoonをmakeしていた時に以下のようなエラーに遭遇、かなり焦った。だってmakeできないんだもん(´;ω;`)

isakmp_quick.c: In function ‘quick_r1recv’:
isakmp_quick.c:2182: error: dereferencing pointer ‘saddr.148’ does break strict-aliasing rules
isakmp_quick.c:2182: note: initialized from here

ここで気にしなければいけないのは

‘saddr.148’ does break strict-aliasing rules

どうやら、make時のコンパイラーとしてgccを利用しているんだが、gccに「-O2」のオプションがついている場合は「strict-aliasing rule」を適用するそうな。ま、今回はそのオプションのおかげで汗かいたのだが・・・。え?ゼロじゃなくて「O」オーです。Optimizeの「O」です。

以下マニュアルより

-O2 Optimize even more. GCC performs nearly all supported
 optimizations that do not involve a space-speed tradeoff. As
 compared to -O, this option increases both compilation time and the
 performance of the generated code.

 -O2 turns on all optimization flags specified by -O. It also turns
 on the following optimization flags: -fthread-jumps
  -falign-functions -falign-jumps -falign-loops -falign-labels
  -fcaller-saves -fcrossjumping -fcse-follow-jumps -fcse-skip-blocks
  -fdelete-null-pointer-checks -fexpensive-optimizations -fgcse
  -fgcse-lm -findirect-inlining -foptimize-sibling-calls -fpeephole2
  -fregmove -freorder-blocks -freorder-functions
  -frerun-cse-after-loop -fsched-interblock -fsched-spec 
  -fschedule-insns -fschedule-insns2 -fstrict-aliasing 
  -fstrict-overflow -ftree-switch-conversion -ftree-pre -ftree-vrp

./configureする時にCFLAGSオプションを指定し「-fno-strict-aliasing」を追加してやる。
そうすることで「strict-aliasing rule」を無効にすることができるぞ(`・ω・´)!

# ./configure --オプション1 --オプション2 CFLAGS=-fno-strict-aliasing

以上

 

コメント

  1. 野田晓波 より:

    cool…..
    ./configure –prefix=/usr –sysconfdir=/etc/racoon –enable-hybrid –enable-frag –enable-dpd –enable-natt CFLAGS=-fno-strict-aliasing

タイトルとURLをコピーしました