ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

C言語とC++言語コミュのLinux のどのディストリビューションでも動作する実行モジュール

  • mixiチェック
  • このエントリーをはてなブックマークに追加
Linux のどのディストリビューションでも動作する実行モジュール
を作成しようとしています。

手始めに・・・

main()
{
printf("AAA");
}
だけのプログラムを、「gcc a.c」でコンパイルして、
異なるディストリビューションで a.out を実行してみました。
結果は、
「Floating point exception」というエラーになります。
ビルドした環境では当然正常に動作します。


これはやはり、printf だけでも依存ライブラリが異なるためでしょうか?

ldd a.out の結果は、
linux-gate.so.1 => (0xffffe000)
libc.so.6 => /lib/i686/libc.so.6 (0xb7df9000)
/lib/ld-linux.so.2 (0xb7f20000)
です。

ビルドしたのは、vine 4.2。
Floating point exception になったのは、CentOS 5.5です。

わかる方がいらっしゃいましたら、教えてください。
よろしくお願いします。

コメント(6)

初歩的だと思いますが、
gcc -static a.c
で静的リンクをすると、
2つの環境で動作する実行モジュールが作成できることは確認しました。

モジュールのサイズは当然大きくなってしまいますが。

とりあえずの解決はみました。
その後実はまだ解決を見ておらず
質問です。

作成するファイルは、実際には実行モジュール(a.out)ではなく
php.ini の extension= に指定する
拡張動的リンクモジュール(.so)なのです。

-static オプションをつけてコンパイルを行うと、
.a .la はできるのですが、.so はできませんでした。

そこで、-staticをはずして、libc.so.6のかわりにlibc.a などを指定して
リンクしました。
→ライブラリごとに静的リンクしたつもりです。

しかし、この方法で作成した.soの動的リンクライブラリは、
ビルドしたマシン以外の環境では正常に動作しませんでした。

Cのプログラムからは、zendなどphpの関数を呼んでいるため、
libphp5.so のかわりにlibphp.a を作成してリンクしてみましたが、
NGでした。

そもそも静的にリンクを行って動的リンクライブラリを作成しようとしていることがNGのような気もしています。

この辺をご存知の方がいらっしゃいましたら、そもそもNGなのか?いけるのか?だけでも教えていただければ幸いです。

よろしくお願いいたします。
結局lddはどうなったんですか?

また、動的リンクは-sharedだと思いますが。。

kernelが elf 対応で動的リンクがないのなら動きそうな気はします。
少なくとも利用しているライブラリーのバージョンは合わせなければならない。
-staticを付けてa.outの動作が正常化するならば、それ関連の問題だろう。
そういうとき、基本的にできるだけglibcを使わないという方法で逃げられる場合もある。
> しかし、この方法で作成した.soの動的リンクライブラリは、
> ビルドしたマシン以外の環境では正常に動作しませんでした。

apacheが起動するときに読み込まれるshared-libの問題は
様々な場面でトラップになってくれる。
質問されている状況ならば、各環境ごとにバイナリーを作成するか、
実行予定環境と全く同じ構成でビルド環境を用意するのが無難。
あき♪様

ldd の結果は、動的リンクするライブラリは残っていました。
使っている関数すべてのオブジェクト(.o)を個別にリンクしようと頑張ってみましたが、
挫折しました。

自分で調べた限りの情報から、
どうも無謀そうなことだったので、
私のモジュールのstaticリンクは、現状あきらめることにいたしました。

ありがとうございました。

sock/vuela 様

>apacheが起動するときに読み込まれるshared-libの問題は
>様々な場面でトラップになってくれる。
>質問されている状況ならば、各環境ごとにバイナリーを作成するか、
>実行予定環境と全く同じ構成でビルド環境を用意するのが無難。
 ありがとうございました。
 ご意見を参考にさせていただき、
 今後の方針を考慮していきたいと思います。


 Apacheに食わせる.soファイルは、
 基本的にどのディストリビューションやバージョンでも動作するものを
 make不要で配布するつもりでおりました。
 今後さらなる展開がございましたら、書き込ませていただきます。

 ありがとうございました。
 よろしくお願いいたします。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

C言語とC++言語 更新情報

C言語とC++言語のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング