ここらっとの地域情報と連携したネットショップサービス「ここCOW」を開発しました。
09/24

よそでちょっとハマった話なのですが、Ruby on RailsをApacheで具合よく動かすためのPassengerを、Solaris 10の環境にインストールしたときに発生したエラーの話です。

手順に従って、必要なパスを通した上で、

-----
# APXS=/opt/coolstack/apache2/bin/apxs
# export APXS
# passenger-install-apache2-module
-----

のように実行したところ、

-----
g++ -Iext -fPIC -DSOLARIS2=10 -D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/opt/coolstack/apache2/include -I/opt/coolstack/apache2/include -I/opt/coolstack/include -DSSL_EXPERIMENTAL -DSSL_ENGINE -I/opt/coolstack/apache2/include -D_REENTRANT -I/usr/local/include -D_XOPEN_SOURCE=500 -D_XPG4_2 -D__EXTENSIONS__ -D__SOLARIS__ -D_FILE_OFFSET_BITS=64 -DBOOST_HAS_STDINT_H -mcpu=ultrasparc -Wall -g -DPASSENGER_DEBUG -DBOOST_DISABLE_ASSERTS -o ext/apache2/libboost_oxt/oxt/thread.o -c ext/oxt/thread.cpp
In file included from ext/oxt/thread.cpp:26:
ext/oxt/thread.hpp:115: error: 'long int _sysconf(int)' cannot appear in a constant-expression
ext/oxt/thread.hpp:115: error: a function call cannot appear in a constant-expression
rake aborted!
Command failed with status (1): [g++ -Iext -fPIC -DSOLARIS2=10 -D_POSIX_PTH...]
/opt/lib/ruby/gems/1.8/gems/passenger-2.2.5/Rakefile:128:in `define_libboost_oxt_task'
(See full trace by running task with --trace)

--------------------------------------------

It looks like something went wrong

Please read our Users guide for troubleshooting tips:

   /opt/lib/ruby/gems/1.8/gems/passenger-2.2.5/doc/Users guide Apache.html

If that doesn't help, please use our support facilities at:

   http://www.modrails.com/

We'll do our best to help you.
-----

のようにエラーで終了してしまいました。

どうやら Issue 369 として認識されている問題のようで、2.2.6で解消予定となっていますが、とりあえず問題箇所に手を入れればコンパイルできそうです。

ということで、gemのディレクトリの passenger-2.2.5/ext/oxt/thread.hpp を、以下のように問題箇所をコメントアウトしてコンパイルすると、通りました。

-----
public:
        /**
         * The platform's minimum stack size, in bytes.
         */
/*      #if defined(PTHREAD_STACK_MIN)
                static const unsigned int MIN_STACK_SIZE = PTHREAD_STACK_MIN;
        #else */
                static const unsigned int MIN_STACK_SIZE = 1024 * 128;
/*      #endif */
-----

※ コメントアウトの2行目がこのソースの115行目にあたります。

この記事へのトラックバックURL:

コメントを書く

このエントリーを含むはてなブックマーク