はーいヽ(*´∀`)ノ
今日は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
以上
コメント
cool…..
./configure –prefix=/usr –sysconfdir=/etc/racoon –enable-hybrid –enable-frag –enable-dpd –enable-natt CFLAGS=-fno-strict-aliasing