1

Ubuntu 12.04 で C++ の CORBA の例を実行しようとしています: http://www.yolinux.com/TUTORIALS/CORBA.html

実行しようとすると、まだエラーが発生します。

    $ ./Server
'IOR:010000001600000049444c3a446174612f53657276696365413a312e3000000001000000000000006800000001010200100000003139322e3136382e3135392e31323900b1aa00000e000000fe4ba4015100001a19000000000000000200000000000000080000000100000000545441010000001c00000001000000010001000100000001000105090101000100000009010100'
Caught CORBA::SystemException.

サーバーを起動する前に、ログファイルを生成しました:

omniNames -start 2812 -logdir ~/Desktop -errlog ~/Desktop/omniNamesError.txt

これにより、以下のように ~/Desktop/omniNamesError.txt ファイルが作成されました。

Thu Jan 24 22:54:34 2013:

Starting omniNames for the first time.
Wrote initial log file.
Read log file successfully.
Root context is IOR:010000002b00000049444c3a6f6d672e6f72672f436f734e616d696e672f4e616d696e67436f6e746578744578743a312e30000001000000000000007400000001010200100000003139322e3136382e3135392e31333000fd0a00000b0000004e616d6553657276696365000300000000000000080000000100000000545441010000001c0000000100000001000100010000000100010509010100010000000901010003545441080000009aad015101004982
Checkpointing Phase 1: Prepare.
Checkpointing Phase 2: Commit.
Checkpointing completed.

次に、ファイルに追加しました:

/etc/omniORB.cfg

生成されたファイルの行:

InitRef = NameService=IOR:000100010000000100010509010100010000000901010003545\
441080000005ea5015101002002010000002b00000049444c3a6f6d672e6f72672f436f734e61\
6d696e672f4e616d696e67436f6e746578744578743a312e30000001000000000000007400000\
001010200100000003139322e3136382e3135392e31333000fd0a00000b0000004e616d655365\
7276696365000300000000000000080000000100000000545441010000001c000000010000000\
1000100010000000100010509010100010000000901010003545441080000009aad0151010049\
82

環境変数も設定しました:

$ export OMNIORB_CONFIG=/etc/omniORB.cfg

チュートリアルで書かれているとおりのすべて、コンパイルされたファイル (2 つの変更後: CRequestServiceA.cpp に#includeを追加し、 $(CC) $(CPPFLAGS) $(INCLUDES) DataSK.cc$(CC) $(CPPFLAGSに変更しました) ) $(INCLUDES) DataSK.cc && mv DataSK.o Data.o in MakeServer) しかし、私が言ったようにまだエラーがあります。

問題を解決してください。私は多くの CORBA C++ チュートリアルから学んでいましたが、効果はありませんでした

4

2 に答える 2

1

構成ファイル内のこれらのバックスラッシュが問題を引き起こしている可能性があります。構成ファイルに長い IOR (変更される) を貼り付ける際の問題を回避するには、構成ファイルでInitRef次のように設定してみてください (テスト プログラムと同じマシンでネーム サービスを実行していると仮定します)。

InitRef = NameService=corbaname::localhost

または、IOR を 1 行として貼り付けることもできます (行を分割したり、バックスラッシュを追加したりしないでください)。

または、次のようにサーバーを実行できます。

$ ./Server -ORBInitRef NameService=corbaname::localhost

または

$ ./Server -ORBInitRef NameService=IOR:010000002b00000049444c3a6f6d672e6f72672f436f734e616d696e672f4e616d696e67436f6e746578744578743a312e30000001000000000000007400000001010200100000003139322e3136382e3135392e31333000fd0a00000b0000004e616d6553657276696365000300000000000000080000000100000000545441010000001c0000000100000001000100010000000100010509010100010000000901010003545441080000009aad015101004982

IOR 文字列を使用する場合は、ネーム サービスを実行するたびにほぼ確実に変更されることに注意してください。そのため、最新のものを使用していることを確認してください。

詳細については、 omniORB のドキュメントを参照してください。

あなたのコメントを見た後に編集してください:

チュートリアルは古く、時代遅れである可能性があります。この行を変更してみてください:

CORBA::Object_var obj1=orb->resolve_initial_references("OmniNameService");

これに

CORBA::Object_var obj1=orb->resolve_initial_references("NameService");

また、 omniORB のドキュメントにある Echo の例を試してみることもできます。

于 2013-01-25T03:29:29.280 に答える
-1

私はこれを解決すると思います: に変更OmniNameServiceNameService、omniORB.cfg ファイルに追加しました:

InitRef = NameService=IOR:00010....

(IOR 名は omniNamesError.txt に由来します)、次のようにサーバーを実行します。

./Server corbaloc:rir:/NameService
于 2016-03-29T21:20:31.207 に答える