2010-12-12 11 views
0

omnetppのinetmanetフレームワークに含まれるUDPモジュール を使用してアプリケーションを作成しようとしています。問題は、含める必要があるファイルがリンクフェーズに含まれないということです。omnetppで自分のモジュールを構築する際の問題

エラーは以下のとおりです。

opp_makemake

[email protected]:~/omnetpp/samples/Basic-Broadcast-Simulation$ opp_makemake --deep -f -I../inet-sommer/src/transport/contract -I../inet-sommer/src/networklayer/contract -I../inet-sommer/src/base 
Creating Makefile in /home/bedo/omnetpp/samples/Basic-Broadcast-Simulation... 
Makefile created, running "make depend" to add dependencies... 
opp_makedep -Y --objdirtree -I../inet-sommer/src/transport/contract -I../inet-sommer/src/networklayer/contract -I../inet-sommer/src/base -I. -Igcc-debug -Igcc-debug/src -Igcc-debug/src/flooding -Isimulations -Isimulations/bitmaps -Isimulations/results -Isrc -Isrc/flooding -f Makefile -P\$O/ -- ./*.cc gcc-debug/*.cc gcc-debug/src/*.cc gcc-debug/src/flooding/*.cc simulations/*.cc simulations/bitmaps/*.cc simulations/results/*.cc src/*.cc src/flooding/*.cc 

は、私は本当に彼らが含まれ得る理由がわからないし、私のモジュールは罰金コンパイル

[email protected]:~/omnetpp/samples/Basic-Broadcast-Simulation$ make 
g++ -c -g -Wall -fno-stack-protector -DHAVE_PCAP -DXMLPARSER=libxml -DWITH_PARSIM -DWITH_NETBUILDER -I../inet-sommer/src/transport/contract -I../inet-sommer/src/networklayer/contract -I../inet-sommer/src/base -I. -Igcc-debug -Igcc-debug/src -Igcc-debug/src/flooding -Isimulations -Isimulations/bitmaps -Isimulations/results -Isrc -Isrc/flooding -I/home/bedo/omnetpp/include -o out/gcc-debug//src/flooding/Flooding.o src/flooding/Flooding.cc 
src/flooding/Flooding.cc: In member function ‘virtual void Flooding::handleLowerMsg(cMessage*)’: 
src/flooding/Flooding.cc:82: warning: unused variable ‘m’ 
g++ -Wl,--export-dynamic -Wl,-rpath,/home/bedo/omnetpp/lib -Wl,-rpath,. -o out/gcc-debug//Basic-Broadcast-Simulation out/gcc-debug//src/flooding/Flooding.o -Wl,--whole-archive -Wl,--no-whole-archive -L"/home/bedo/omnetpp/lib/gcc" -L"/home/bedo/omnetpp/lib" -u _tkenv_lib -lopptkenvd -loppenvird -lopplayoutd -u _cmdenv_lib -loppcmdenvd -loppenvird -loppsimd -ldl -lstdc++ 
out/gcc-debug//src/flooding/Flooding.o: In function `Flooding::setupLowerLayer()': 
/home/bedo/omnetpp/samples/Basic-Broadcast-Simulation/src/flooding/Flooding.cc:50: undefined reference to `UDPControlInfo::UDPControlInfo()' 
/home/bedo/omnetpp/samples/Basic-Broadcast-Simulation/src/flooding/Flooding.cc:52: undefined reference to `UDPSocket::generateSocketId()' 
out/gcc-debug//src/flooding/Flooding.o: In function `Flooding::sendMessage()': 
/home/bedo/omnetpp/samples/Basic-Broadcast-Simulation/src/flooding/Flooding.cc:101: undefined reference to `UDPControlInfo::UDPControlInfo()' 
/home/bedo/omnetpp/samples/Basic-Broadcast-Simulation/src/flooding/Flooding.cc:103: undefined reference to `IPAddress::ALL_HOSTS_MCAST' 
collect2: ld returned 1 exit status 
make: *** [out/gcc-debug//Basic-Broadcast-Simulation] Error 1 
[email protected]:~/omnetpp/samples/Basic-Broadcast-Simulation$ 

を作るが、リンクフェーズで私は "未定義の参照"を取得します。

+2

ここにomnetppのエキスパートがいない限り、これにはいくつかの前後が必要です。メイクファイルは依存関係を正しく処理していないので、リンカはUDPコード(または少なくとも "Flooding"が必要とする部分)をリンクしません。たとえば、次のようなソースファイルを見つけることから始めます。 'UDPControlInfo()'を実行し、オブジェクトファイルにコンパイルされているかどうかを調べ、もしそうであれば、そのオブジェクトファイルがライブラリにリンクされているかどうかを調べます。 – Beta

答えて

0

解決済み。ルートディレクトリのmakefileをより簡単なものに変更し、srcのmakefileにすべてのコンパイルとリンクの任務を残しました。

ありがとうございました

0

あなたはこのようにライブラリ未定義のシンボルを見て、あなたとリンクすべてのライブラリ上でnmを実行することができます。

nm liboppcmdenvd.(so/a) | c++filt | grep UDPControlInfo 

c++filtデマングルC++シンボル)。

シンボルを必要とライブラリは、(未定義のためU)のような出力に何かを取得します:

これは、することができ
00000000007f90a0 T UDPControlInfo 

:/シンボルを持っている定義

00000000007f90a0 U UDPControlInfo 

図書館のような出力に何かを取得しますTまたはt

もちろん、リンクするライブラリは、01で始まる引数で示されます:

-lopptkenvd -loppenvird -lopplayoutd -u _cmdenv_lib -loppcmdenvd -loppenvird 
liboppcmdenvd liboppenvird liboppsimd libUDPControlInfo 
関連する問題