サイト移転のお知らせ

しばらくブログお休みしていましたが、こちらに移転しました。よろしければこちらへどうぞ。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

さくらサーバでのfastcgiのコンパイルでこけた

 過去記事さくらサーバにRedmine-1.3.2 + gateway.cgiを入れてみたを見ながら改めてサクラサーバにRedmineをいれようとしたところ、過去にはできたfastcgiのコンパイルでこけてしまいました。
 使っているソースは同じなので、サーバ環境の何かが変わったんでしょう。何かは分かりませんが(笑)
 解決方法を紹介しておきます。




 でてきたエラーは以下。configure、makeの後。
$ ./configure --prefix=$HOME/local
$ make
$ make install
Making install in libfcgi
/bin/sh ../mkinstalldirs /home/user/local/lib
/bin/sh ../libtool --mode=install /usr/bin/install -c libfcgi.la /home/user/local/lib/libfcgi.la
/usr/bin/install -c .libs/libfcgi.so.0.0 /home/user/local/lib/libfcgi.so.0.0
/usr/bin/install -c .libs/libfcgi.lai /home/user/local/lib/libfcgi.la
/usr/bin/install -c .libs/libfcgi.a /home/user/local/lib/libfcgi.a
ranlib /home/user/local/lib/libfcgi.a
chmod 644 /home/user/local/lib/libfcgi.a
----------------------------------------------------------------------
Libraries have been installed in:
/home/user/local/lib

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the `LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the `LD_RUN_PATH' environment variable
during linking
- use the `-Wl,--rpath -Wl,LIBDIR' linker flag

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
/bin/sh ../libtool --mode=install /usr/bin/install -c libfcgi++.la /home/user/local/lib/libfcgi++.la
libtool: install: warning: relinking `libfcgi++.la'
cd /home/user/local/src/fcgi-2.4.0/libfcgi; /bin/sh ../libtool --mode=relink g++ -g -O2 -o libfcgi++.la -lfcgi -rpath /home/user/local/lib fcgio.lo
gcc -shared fcgio.lo -Wl,--rpath -Wl,/home/user/local/lib -L/home/user/local/lib -lfcgi -Wl,-soname -Wl,libfcgi++.so.0.0 -o .libs/libfcgi++.so.0.0
/usr/bin/ld: /home/user/local/lib/libfcgi.a(libfcgi_la-fcgiapp.o): relocation R_X86_64_32 can not be used when making a shared object; recompile with -fPIC
/home/user/local/lib/libfcgi.a: could not read symbols: Bad value
libtool: install: error: relink `libfcgi++.la' with the above command before installing it

----------------------------------------------------------------------
Libraries have been installed in:
/home/user/local/lib

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the `LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the `LD_RUN_PATH' environment variable
during linking
- use the `-Wl,--rpath -Wl,LIBDIR' linker flag

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
Making install in cgi-fcgi
/bin/sh ../mkinstalldirs /home/user/local/bin
/bin/sh ../libtool --mode=install /usr/bin/install -c cgi-fcgi /home/user/local/bin/cgi-fcgi
/usr/bin/install -c .libs/cgi-fcgi /home/user/local/bin/cgi-fcgi
Making install in examples
Making install in include
/bin/sh ../mkinstalldirs /home/user/local/include
mkdir /home/user/local/include
/usr/bin/install -c -m 644 fastcgi.h /home/user/local/include/fastcgi.h
/usr/bin/install -c -m 644 fcgi_stdio.h /home/user/local/include/fcgi_stdio.h
/usr/bin/install -c -m 644 fcgiapp.h /home/user/local/include/fcgiapp.h
/usr/bin/install -c -m 644 fcgimisc.h /home/user/local/include/fcgimisc.h
/usr/bin/install -c -m 644 fcgio.h /home/user/local/include/fcgio.h
/usr/bin/install -c -m 644 fcgios.h /home/user/local/include/fcgios.h
/bin/sh ./mkinstalldirs /home/user/local/include
/usr/bin/install -c -m 644 fcgi_config.h /home/user/local/include/fcgi_config.h
$


ライブラリはインストール先に配置されるのでうまくいったかと思ったのですが、よく見るとエラーが出ています(赤字のところ)。正しくライブラリができていないので、この後でこのライブラリを使うことができません。

 エラーメッセージにあるとおり、libfcgi/Makefileを見ると、CFLAGSとCXXFLAGSに-fPICオプションが付いていませんでした。
 ということで、以下のようにすれば問題なくコンパイルできました(青字のところ)。
$ make clean
$ ./configure --prefix=$HOME/local CFLAGS="-g -O2 -Wall -fPIC" CXXFLAGS="-g -O2 -Wall -fPIC"
$ make
$ make install


環境変えるとこういう事がおきるから面倒です。
関連記事
スポンサーサイト

テーマ : サーバ
ジャンル : コンピュータ

コメントの投稿

非公開コメント

サイト内検索
プロフィール

Author:imxs

Androidアプリ開発などを行っているimxsの開発者です。気になることを調べてメモって行きます。ほとんどの人にはどうでもいい内容でも、広い世の中一人くらいは同じ疑問を持った奇妙な人がいることを信じつつ。暖かい目で見守ってやってください。
imxsの開発者ブログは移転しました。よろしければこちらへどうぞ。

カテゴリ
最新記事
リンク
RSSリンクの表示
最新コメント
最新トラックバック
FC2カウンター
アクセスランキング
[ジャンルランキング]
携帯電話・PHS
134位
アクセスランキングを見る>>

[サブジャンルランキング]
Android(Google)
34位
アクセスランキングを見る>>
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。