0

CORBA を使用するソフトウェアとのインターフェイスとして omniORB を使用する準備として、omniORB について理解しようとしています。私が使用している戦略は、omniORB の例 (echo の例、具体的には eg3_impl と eg3_cc) を使用し、受信したソフトウェアの idl を必要な動作をするまでブレンドすることです。そのために、私が書いているソフトウェアを残りの omniORB スタックから分離しようとしています (つまり、コンパイルされたライブラリに依存する独立した makefile を書こうとしています)。sourceforge から (omniORB-support.com リンク経由で) ダウンロードした omniORB-4.2.3 を使用しています。

私が直面している問題は、独立したメイクファイルからコンパイルされた例には、ツリーでコンパイルされた例にはないメモリの問題があるように見えることです。

  1. 独立した Makefile からコンパイルされた例では、「malloc()」または「new」されていないポインターの割り当てを解除しようとしています。(迷惑ですが、ショーストッパーではありません)
  2. 独立した Makefile からコンパイルされた例は、文字列ポインタを正しく記録していないようです。(ショーストッパー)。

ソース ファイルは 2 つの例で同じです。唯一の違いは、非独立の例では omniORB ツリーに組み込まれた makefile 構造を使用し、独立したソフトウェアでは、echo の例をビルドしたときに makefile 構造が行っていることを観察したことに基づいて、私が書いたコンパイル スクリプトを使用することです。

ここに私のスクリプトがあります:

WHICH_BUILD_DIR=build2
WHICH_VERSION=omniORB-4.2.3
INCLUDE_G_PLUS_PLUS="-I./idl_artifacts/ -I../${WHICH_VERSION}/include -I. -I../${WHICH_VERSION}/${WHICH_BUILD_DIR}/include"

DEFINES_G_PLUS_PLUS="-D__OMNIORB4__ -D_REENTRANT -D__OSVERSION__=2 -D__linux__ -D__x86__"

LIBRARY_G_PLUS_PLUS="-L../${WHICH_VERSION}/${WHICH_BUILD_DIR}/lib -L/usr/lib"
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/home/jasont/FACE_translator/omniORB-4.2.3/build2/lib

reset

if [ "~$1" == "~debug" ] ; then DEBUGGER_OPTION="-g"
else                            DEBUGGER_OPTION=""   ; fi
rm -rf ./idl_artifacts *.o eg3_impl eg3_clt eg3_tieimpl
mkdir idl_artifacts

#compile idl file to skeleton files
  ../${WHICH_VERSION}/${WHICH_BUILD_DIR}/bin/omniidl -bcxx -Wba -Wbtp -C./idl_artifacts/ echo.idl

#regular compile
  g++ -c $DEBUGGER_OPTION -O2 -Wall -Wno-unused -fexceptions $INCLUDE_G_PLUS_PLUS $DEFINES_G_PLUS_PLUS -o      echoSK.o  ./idl_artifacts/echoSK.cc
  g++ -c $DEBUGGER_OPTION -O2 -Wall -Wno-unused -fexceptions $INCLUDE_G_PLUS_PLUS $DEFINES_G_PLUS_PLUS -o    eg3_impl.o                eg3_impl.cc
# g++ -c $DEBUGGER_OPTION -O2 -Wall -Wno-unused -fexceptions $INCLUDE_G_PLUS_PLUS $DEFINES_G_PLUS_PLUS -o eg3_tieimpl.o             eg3_tieimpl.cc
  g++ -c $DEBUGGER_OPTION -O2 -Wall -Wno-unused -fexceptions $INCLUDE_G_PLUS_PLUS $DEFINES_G_PLUS_PLUS -o     eg3_clt.o                 eg3_clt.cc
  
#regular link
# g++ -o eg3_impl    -O2 -Wall -Wno-unused -fexceptions    eg3_impl.o echoSK.o $LIBRARY_G_PLUS_PLUS         -lomniORB4 -lomnithread -lpthread
##g++ -o eg3_tieimpl -O2 -Wall -Wno-unused -fexceptions eg3_tieimpl.o echoSK.o $LIBRARY_G_PLUS_PLUS         -lomniORB4 -lomnithread -lpthread
# g++ -o eg3_clt     -O2 -Wall -Wno-unused -fexceptions     eg3_clt.o echoSK.o $LIBRARY_G_PLUS_PLUS         -lomniORB4 -lomnithread -lpthread
  g++ -o eg3_impl    -O2 -Wall -Wno-unused -fexceptions    eg3_impl.o echoSK.o $LIBRARY_G_PLUS_PLUS -static -lomniORB4 -lomnithread -lpthread

./eg3_impl

...これが私の独立したソフトウェアの動作です (omniORB.cfg tracelevel を最大に設定することによって生成されます)。

...
omniORB: (0) 2020-11-06 12:50:37.443054: LocateRequest to remote: key<NameService>
omniORB: (1) 2020-11-06 12:50:37.443022: giopRendezvouser task execute for giop:tcp:10.0.0.247:57082
omniORB: (2) 2020-11-06 12:50:37.443166: AsyncInvoker: thread id 2 has started. Total threads = 2.
omniORB: (2) 2020-11-06 12:50:37.443199: AsyncInvoker: thread id 2 assigned to general tasks. Total general threads = 2.
omniORB: (2) 2020-11-06 12:50:37.443217: AsyncInvoker: thread id 2 performing immediate general task.
omniORB: (2) 2020-11-06 12:50:37.443232: Scavenger task execute.
omniORB: (1) 2020-11-06 12:50:37.493125: SocketCollection idle. Sleeping.
omniORB: (0) 2020-11-06 12:50:38.443279: Client attempt to connect to giop:tcp:10.0.0.247:2809
omniORB: (0) 2020-11-06 12:50:38.443411: Client opened connection to giop:tcp:10.0.0.247:2809
omniORB: (0) 2020-11-06 12:50:38.443423: sendChunky: to giop:tcp:10.0.0.247:2809 35 bytes
omniORB: (0) 2020-11-06 12:50:38.443432: 
4749 4f50 0102 0103 1700 0000 0200 0000 GIOP............
0000 7665 0b00 0000 4e61 6d65 5365 7276 ..ve....NameServ
6963 65                                 ice
omniORB: (0) 2020-11-06 12:50:38.443236: omniORB: (0) 2020-11-06 12:50:37.443107: omniORB: (0) 2020-11-06 12:50:38.444269: inputMessage: from giop:tcp:10.0.0.247:2809 20 bytes
omniORB: (0) 2020-11-06 12:50:38.444312: 
4749 4f50 0102 0104 0800 0000 0200 0000 GIOP............
0100 0000                               ....
omniORB: (0) 2020-11-06 12:50:38.444395: Send codeset service context: (ISO-8859-1,UTF-16)
omniORB: (0) 2020-11-06 12:50:38.444426: sendChunky: to giop:tcp:10.0.0.247:2809 92 bytes
omniORB: (0) 2020-11-06 12:50:38.444439: 
4749 4f50 0102 0100 5000 0000 0400 0000 GIOP....P.......
0300 0000 0000 0000 0b00 0000 4e61 6d65 ............Name
5365 7276 6963 6578 1100 0000 6269 6e64 Servicex....bind
5f6e 6577 5f63 6f6e 7465 7874 0069 4f52 _new_context.iOR
0100 0000 0100 0000 0c00 0000 0100 0000 ................
0100 0100 0901 0100 0000 0000           ............
omniORB: (0) 2020-11-06 12:50:38.444419: omniORB: (0) 2020-11-06 12:50:38.444414: JET052
omniORB: (0) 2020-11-06 12:50:38.444914: inputMessage: from giop:tcp:10.0.0.247:2809 80 bytes
omniORB: (0) 2020-11-06 12:50:38.444958: 
4749 4f50 0102 0101 4400 0000 0400 0000 GIOP....D.......
0100 0000 0000 0000 3400 0000 4944 4c3a ........4...IDL:
6f6d 672e 6f72 672f 436f 734e 616d 696e omg.org/CosNamin
672f 4e61 6d69 6e67 436f 6e74 6578 742f g/NamingContext/
496e 7661 6c69 644e 616d 653a 312e 3000 InvalidName:1.0.
./go.sh: line 46: 28855 Segmentation fault      (core dumped) ./eg3_impl

...そして、これがエコーの例で見ていることです

omniORB: (0) 2020-11-06 12:59:50.031354: LocateRequest to remote: key<NameService>
omniORB: (2) 2020-11-06 12:59:50.031466: AsyncInvoker: thread id 2 has started. Total threads = 2.
omniORB: (2) 2020-11-06 12:59:50.031512: AsyncInvoker: thread id 2 assigned to general tasks. Total general threads = 2.
omniORB: (2) 2020-11-06 12:59:50.031552: AsyncInvoker: thread id 2 performing immediate general task.
omniORB: (2) 2020-11-06 12:59:50.031575: Scavenger task execute.
omniORB: (1) 2020-11-06 12:59:50.081241: SocketCollection idle. Sleeping.
omniORB: (0) 2020-11-06 12:59:51.031650: Client attempt to connect to giop:tcp:10.0.0.247:2809
omniORB: (0) 2020-11-06 12:59:51.031799: Client opened connection to giop:tcp:10.0.0.247:2809
omniORB: (0) 2020-11-06 12:59:51.031812: sendChunky: to giop:tcp:10.0.0.247:2809 35 bytes
omniORB: (0) 2020-11-06 12:59:51.031822: 
4749 4f50 0102 0103 1700 0000 0200 0000 GIOP............
0000 206c 0b00 0000 4e61 6d65 5365 7276 .. l....NameServ
6963 65                                 ice
omniORB: (0) 2020-11-06 12:59:51.031607: omniORB: (0) 2020-11-06 12:59:50.031417: omniORB: (0) 2020-11-06 12:59:51.032369: inputMessage: from giop:tcp:10.0.0.247:2809 20 bytes
omniORB: (0) 2020-11-06 12:59:51.032405: 
4749 4f50 0102 0104 0800 0000 0200 0000 GIOP............
0100 0000                               ....
omniORB: (0) 2020-11-06 12:59:51.032463: Send codeset service context: (ISO-8859-1,UTF-16)
omniORB: (0) 2020-11-06 12:59:51.032505: sendChunky: to giop:tcp:10.0.0.247:2809 119 bytes
omniORB: (0) 2020-11-06 12:59:51.032512: 
4749 4f50 0102 0100 6b00 0000 0400 0000 GIOP....k.......
0300 0000 0000 0000 0b00 0000 4e61 6d65 ............Name
5365 7276 6963 656f 1100 0000 6269 6e64 Serviceo....bind
5f6e 6577 5f63 6f6e 7465 7874 0072 6561 _new_context.rea
0100 0000 0100 0000 0c00 0000 0100 0000 ................
0100 0100 0901 0100 0100 0000 0500 0000 ................
7465 7374 006e 6563 0b00 0000 6d79 5f63 test.nec....my_c
6f6e 7465 7874 00                       ontext.
omniORB: (0) 2020-11-06 12:59:51.032501: omniORB: (0) 2020-11-06 12:59:51.032496: JET052
omniORB: (0) 2020-11-06 12:59:51.033479: inputMessage: from giop:tcp:10.0.0.247:2809 81 bytes
omniORB: (0) 2020-11-06 12:59:51.033528: 
4749 4f50 0102 0101 4500 0000 0400 0000 GIOP....E.......
0100 0000 0000 0000 3500 0000 4944 4c3a ........5...IDL:
6f6d 672e 6f72 672f 436f 734e 616d 696e omg.org/CosNamin
672f 4e61 6d69 6e67 436f 6e74 6578 742f g/NamingContext/
416c 7265 6164 7942 6f75 6e64 3a31 2e30 AlreadyBound:1.0
00                                      .

これら 2 つの実行を分析すると、壊れたコードの「bind_new_context」メッセージから「test」と「my_context」の文字列が欠落していることに気付きます... (これが、ネーム サービスが「無効な名前」例外で応答する理由です)。壊れたコードでは、メッセージが小さくなり、メッセージの先頭にあるサイズ フィールドに小さいサイズが反映されます。

これは、壊れたコードで "bind_new_context" 関数が引数なし (または NULL 引数付き) で呼び出されることと一致しています。ただし、どちらの例も同じソース コードを使用しています。同じ rootContext 変数と contextName 変数を使用して同じ bind_new_context 関数を呼び出し、同じ方法で入力します。したがって、omniORB 内からコンパイルされたバージョンには存在しない、私のビルド スクリプトが導入するある種の環境の混乱があるに違いないと思います。これは、クリーンアップ コードが壊れた理由も説明している可能性があります。しかし、私はそれをゆるめようとして2日間費やしましたが、空になってしまいました.

何か案は?

編集: これは、ビルド スクリプトのベースとなったツリーの makefile からの出力です。違いはありますが、実質的なものは何もありません。

[jasont@dodeca3 echo]$ make veryclean ; make VERBOSE=1
rm -f eg1 eg2_impl eg2_clt eg3_impl eg3_clt \
    eg3_tieimpl
rm -f *.o *.a 
rm -f *.d
rm -f *.pyc
rm -f ../../../stub/echo.idl ../../../stub/echo.hh ../../../stub/echoSK.cc ../../../stub/echoDynSK.cc ../../../stub/echoSK.o ../../../stub/echoDynSK.o ../../../stub/echoSK.d ../../../stub/echoDynSK.d ../../../stub/dir.mk 
dir=../../../stub;  if [ ! -d $dir ]; then (umask 022; set -x; ../../../../bin/scripts/omkdirhier $dir); fi
rm -f ../../../stub/echo.idl
../../../bin/omniidl -bcxx -Wba -Wbtp -C../../../stub  ../../../../idl/echo.idl
../../../bin/omkdepend -D__cplusplus -D__GNUG__ -D__GNUC__ -D__OMNIORB4__ -I../../../stub -D_REENTRANT -I. -I../../../../src/examples/echo -I../../../include -I../../../../include -D__OSVERSION__=2 -D__linux__ -D__x86_64__ ../../../../src/examples/echo/eg3_clt.cc ../../../../src/examples/echo/eg3_impl.cc ../../../../src/examples/echo/eg2_clt.cc ../../../../src/examples/echo/eg2_impl.cc ../../../../src/examples/echo/eg1.cc
g++ -c -O2 -Wall -Wno-unused -fexceptions  -D__OMNIORB4__ -I../../../stub -D_REENTRANT -I. -I../../../../src/examples/echo -I../../../include -I../../../../include -D__OSVERSION__=2 -D__linux__ -D__x86_64__ -o eg1.o ../../../../src/examples/echo/eg1.cc

cd ../../../stub
make[1]: Entering directory `/home/jasont/FACE_translator/omniORB-4.2.3/build2/stub'
../bin/omkdepend -D__cplusplus -D__GNUG__ -D__GNUC__ -D__OMNIORB4__ -I../stub -D_REENTRANT -I. -I. -I../include -I/home/jasont/FACE_translator/omniORB-4.2.3/include -D__OSVERSION__=2 -D__linux__ -D__x86_64__ echoDynSK.cc echoSK.cc
g++ -c -O2 -Wall -Wno-unused -fexceptions  -D__OMNIORB4__ -I../stub -D_REENTRANT  -I. -I. -I../include -I/home/jasont/FACE_translator/omniORB-4.2.3/include -D__OSVERSION__=2 -D__linux__ -D__x86_64__ -o echoSK.o echoSK.cc
make[1]: Leaving directory `/home/jasont/FACE_translator/omniORB-4.2.3/build2/stub'
+ rm -f eg1
+ g++ -o eg1 -O2 -Wall -Wno-unused -fexceptions -L../../../lib -L../../../../lib eg1.o ../../../stub/echoSK.o -lomniORB4 -lomnithread -lpthread
g++ -c -O2 -Wall -Wno-unused -fexceptions  -D__OMNIORB4__ -I../../../stub -D_REENTRANT -I. -I../../../../src/examples/echo -I../../../include -I../../../../include -D__OSVERSION__=2 -D__linux__ -D__x86_64__ -o eg2_impl.o ../../../../src/examples/echo/eg2_impl.cc
+ rm -f eg2_impl
+ g++ -o eg2_impl -O2 -Wall -Wno-unused -fexceptions -L../../../lib -L../../../../lib eg2_impl.o ../../../stub/echoSK.o -lomniORB4 -lomnithread -lpthread
g++ -c -O2 -Wall -Wno-unused -fexceptions  -D__OMNIORB4__ -I../../../stub -D_REENTRANT -I. -I../../../../src/examples/echo -I../../../include -I../../../../include -D__OSVERSION__=2 -D__linux__ -D__x86_64__ -o eg2_clt.o ../../../../src/examples/echo/eg2_clt.cc
+ rm -f eg2_clt
+ g++ -o eg2_clt -O2 -Wall -Wno-unused -fexceptions -L../../../lib -L../../../../lib eg2_clt.o ../../../stub/echoSK.o -lomniORB4 -lomnithread -lpthread
g++ -c -O2 -Wall -Wno-unused -fexceptions  -D__OMNIORB4__ -I../../../stub -D_REENTRANT -I. -I../../../../src/examples/echo -I../../../include -I../../../../include -D__OSVERSION__=2 -D__linux__ -D__x86_64__ -o eg3_impl.o ../../../../src/examples/echo/eg3_impl.cc
+ rm -f eg3_impl
+ g++ -o eg3_impl -O2 -Wall -Wno-unused -fexceptions -L../../../lib -L../../../../lib eg3_impl.o ../../../stub/echoSK.o -lomniORB4 -lomnithread -lpthread
g++ -c -O2 -Wall -Wno-unused -fexceptions  -D__OMNIORB4__ -I../../../stub -D_REENTRANT -I. -I../../../../src/examples/echo -I../../../include -I../../../../include -D__OSVERSION__=2 -D__linux__ -D__x86_64__ -o eg3_clt.o ../../../../src/examples/echo/eg3_clt.cc
+ rm -f eg3_clt
+ g++ -o eg3_clt -O2 -Wall -Wno-unused -fexceptions -L../../../lib -L../../../../lib eg3_clt.o ../../../stub/echoSK.o -lomniORB4 -lomnithread -lpthread
g++ -c -O2 -Wall -Wno-unused -fexceptions  -D__OMNIORB4__ -I../../../stub -D_REENTRANT -I. -I../../../../src/examples/echo -I../../../include -I../../../../include -D__OSVERSION__=2 -D__linux__ -D__x86_64__ -o eg3_tieimpl.o ../../../../src/examples/echo/eg3_tieimpl.cc
+ rm -f eg3_tieimpl
+ g++ -o eg3_tieimpl -O2 -Wall -Wno-unused -fexceptions -L../../../lib -L../../../../lib eg3_tieimpl.o ../../../stub/echoSK.o -lomniORB4 -lomnithread -lpthread
4

0 に答える 0