- ベストアンサー
64bitの実行ファイルを実行する場合
開発機(64bit)でCのソースをコンパイル・実行ファイル作成をし、本番機(64bit)に実行ファイルだけFTP転送します。 そして本番機には64bitのCのコンパイラ(cc)は入ってなく、32bitのものが入っています。 そういう環境のせいか、signal 11を出してプログラムは停止します。 #開発機では正常稼動しています Cの実行ファイルが実行されるときはコンパイラが影響するものなのでしょうか? #影響するようでしたら上記エラーが出るのも納得できるのですが。。 申しわけありませんが、何かアドバイスがありましたらよろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Sig.11は「Segmentation Fault」なので、どこかで「不正なアドレス」が生成されてます。 怪しいのは「実行時ロードライブラリ」です。 コンパイル時に「実行時ロードライブラリを使わず、すべてのライブラリを実行ファイルに組み込む」ように指定すれば「実行マシンのコンパイル環境に依存しない実行ファイル」になります。 もし、コンパイル時に「実行時ロードライブラリを使う」としていた場合「開発機と本番機で、同一のコンパイラがインストールされている必要がある」ので、異なるコンパイラが居る場合、動作は未定義です。 なお、通常「実行時ロードライブラリを使う」とした場合、実行ファイルと一緒に「必要なロードライブラリも添付して、実行ファイルと一緒にインストールさせる」のが普通です(「make INSTALL」をすると、必要なファイルが必要な場所に配置されるようにする。「FTP転送して実行ファイルを置くだけでは駄目」だという事) 「FTP転送して実行ファイルを置くだけでOK」にする為には「実行ファイルたった1つですべてが完結している必要」があります。
その他の回答 (3)
- Tacosan
- ベストアンサー率23% (3656/15482)
OS はわかったけど, 「リンクしているライブラリ」がわからん... ああ, 言葉が全然足りない. #3 の通りです. 「実行時にリンクするライブラリ」がわからんと無意味ですね.
- Tacosan
- ベストアンサー率23% (3656/15482)
とりあえず, 開発機と本番機の両方で ・OS は何か ・実行ファイルでどのライブラリをリンクしているのか を書いてください. ライブラリのバージョンとかの問題だったりして.
補足
OSはHP-UX11.31 ia64です。 開発機のCCは /opt/ansic/bin/ccで、本番機は/usr/bin/ccです。 file /opt/ansic/bin/cc /opt/ansic/bin/cc: ELF-64 executable object file - IA64 file /usr/bin/cc /usr/bin/cc: ELF-32 executable object file - IA64 あと両方にPro*Cが入っています。 Pro*C/C++: Release 11.1.0.7.0
- Tasuke22
- ベストアンサー率33% (1799/5383)
64bit用dllがインストールされていないとか。
補足
すいません、自己解決しました。 mallocの入ったソースが悪さをしていたようです。 malloc.hをincludeしないといけなかったようです。 http://docs.hp.com/ja/B2355-90855/malloc.3C.html #stdlib.hになってました