system management
1748165 メンバー
4389 オンライン
108758 解決策
新規ポスト

b2000で実行可能なexeファイルをc8000でccコンパイルする方法

 
TLSG01
貴重なコントリビューター

b2000で実行可能なexeファイルをc8000でccコンパイルする方法

model:c8000

OS:hpux11.iv1 上でccコンパイルした

exeファイルを

model:b2000

OS:hpux10.20上で実行したら

不正システム・コール (コアファイルが作られました。)

c8000とb2000で共通に実行できる

exeファイルを作る

ccのオプションをご存じの方はおられますでしょうか?

6件の返信6
uhyo
貴重なコントリビューター

b2000で実行可能なexeファイルをc8000でccコンパイルする方法

10.20と11iv1ってバイナリーコンパチブルなんでしょうか? ちょっと時間がなくて調べられないんですが、OSのビット数とかも考えると、互換性ないような気がします。昔、PA2.0で作ったものをPA1.xで動かすため(下位互換)+DAportableオプションをつけてコンパイルすることで、PA2.0に特化しないコンパイルをすることはできたはずですが・・・
TLSG01
貴重なコントリビューター

b2000で実行可能なexeファイルをc8000でccコンパイルする方法

現在b2000(hpux10.20)とhp715(hpux9.05)で

共通に使用する為に

ccコンパイルのオプションに+DA1.1cを付加して

コンパイルしています。

hpux10.20:9.05間では問題は起きていません。

c8000:hpux11.iv1(64bitOS)で +DA1.1cや+DA2.0を

試したのですが b2000上では core dumpして実行

できませんでした。?????

uhyo
貴重なコントリビューター

b2000で実行可能なexeファイルをc8000でccコンパイルする方法

+DA1.1cや+DA2.0というオプションは、コンパイルされたマシン語が、PARISCの1.1c, 2.0でも読めるようにマシン語を生成するという意味です。ビット数が同じで必要なライブラリがそろっていれば、実行はされると思います。

今回の場合、このPA-RISCの互換性のほかにビット数の問題があると思います。32bitと64bitではアドレスの使われ方がまったく異なるので、そのあたりも解決しないといけません。http://docs.hp.com/ja/B2355-60104-01/cc_bundled.1.htmlを見ると、+DDdata_modelなんてオプションがありそうなので、もしかするとこれでいけるのかもしれません。
hazelwood
信頼あるコントリビューター

b2000で実行可能なexeファイルをc8000でccコンパイルする方法

「10.20の実行ファイルを11iv1で実行することはサポートされているが、その逆はサポートされていない」と思います。

コンパイル時に参照するライブラリは、そのOS版ネイティブ(表現がちょっと...)のものです。

libc.1, libc.2のようにライブラリがバージョニングされており、linkerが参照するlibc.slは最新のものにシンボリックリンクされています。(libcに限らないです。)

このため、11iv1でのコンパイル時に参照するlibc.xが10.20にはないので、正常に実行できないのだと思います。

TLSG01
貴重なコントリビューター

b2000で実行可能なexeファイルをc8000でccコンパイルする方法

c8000上で

% c89 -g +DA2.0 A.c -o A.exe で

コンパイルしたA.exeを

b2000へrcpして実行したら

/usr/lib/libc.2 がリンクできないと出たので

c8000からrcpしたら

/usr/lib/libdld.2 がリンクできないと出たので

またc8000からrcpしました。

そうしたら

main(){ printf("RUN\n") }

という1行だけのプログラムですが

実行できました。

果たして、どこまで、動けるのか?

oops
貴重なコントリビューター

b2000で実行可能なexeファイルをc8000でccコンパイルする方法

hazelwoodさんが書かれている通り、ソフトに関しては上位互換はありますが、下位互換はありません。

10.20 や 11.00 でコンパイルしたものを 11.11 で動作させることが可能ですが、11.11 でコンパイルしたものは下位の OS で動作させることはできません。その場合は、11.11 以上の OS で動作させなければいけません。

DA というのはアーキテクチャに関する互換のもので、OS(ソフトウェア)に互換があっても、アーキテクチャが異なる場合を考慮してのオプションです。例えば、PA2.0 の 11.00 で作成したものを PA1.1 の 11.00 でも動作させたいのであれば、+DAportable とか +DA1.1 をつける必要があるということです。