[make] undefined reference to `__sync_add_and_fetch_4′ のエラーを解消するの巻

スポンサーリンク

こちらの記事で紹介している通り、nginxのコンパイルを行おうとmakeしたときに以下のエラーが出てきた。

ngx_pagespeed-release-1.6.29.5-beta/src/ngx_base_fetch.cc:185: undefined reference to `__sync_add_and_fetch_4'
collect2: ld returned 1 exit status
make[1]: *** [objs/nginx] Error 1

というのも、今回はyumでインストールしたnginxのconfigureオプションを nginx -V で確認してから、同様のconfigureオプションを指定してソースからコンパイルしようと思っていたのだが、yumでインストールされているnginxがコンパイルされている環境でのCPUタイプと、今回ソースからコンパイル使用としている環境のCPUタイプが異なるために発生した模様。

スポンサーリンク

undefined reference to `__sync_add_and_fetch_4′

情報は以下のサイトから確認できた。
undefined reference to `__sync_add_and_fetch_4′ when compiling Redis | ESchrade

The solution is to explicitly declare the CPU type to make this work.

ということで、現在のCPUタイプを確認してみる。

[root@vps1 ~]# uname -m
i686
[root@vps1 ~]#

yumでインストールしたnginxを用いてnginx -Vをしたときに指定されているconfigureオプションは以下のとおり

省略 --with-cc-opt='-O2 -g -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables' 省略

ここの -march=i386-march=i686 にすることでmakeは無事終了しました。

おしまいヽ(´ー`)ノ

コメント

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