2016-06-23 7 views
0

私は自分のUDPアプリケーションをinetのUDPBasicAppから実装しようとしています。私はこのようになりますVoIPApp.ccを作成しました:omnet ++のUDPBasicApp由来アプリケーションが登録されていないか、またはリンクされていません

#include <omnetpp.h> 

class VoIPApp: public inet::UDPBasicApp { 
public: 

}; 

Register_Class(VoIPApp); 

私は私のnetwork.nedファイル内のアプリを宣言:

import inet.networklayer.configurator.ipv4.FlatNetworkConfigurator; 
import inet.node.inet.StandardHost; 
import ned.DatarateChannel; 
import inet.applications.udpapp.UDPBasicApp; 

simple VoIPApp extends UDPBasicApp 
{ 
    @class(VoIPApp); 
} 

network VoIPNetwork 
{ 
    @display("bgb=561,272"); 
    types: 
     channel standardChannel extends DatarateChannel 
     { 
      delay = default(10ms); 
      datarate = default(10Mbps); 
     } 
    submodules: 
     host1: StandardHost { 
      @display("p=108,96"); 
     } 
     host2: StandardHost { 
      @display("p=431,96"); 
     } 
     flatNetworkConfigurator: FlatNetworkConfigurator { 
      @display("p=253,31"); 
     } 
     host3: StandardHost { 
      @display("p=250,221"); 
     } 
    connections: 
     host1.pppg++ <--> standardChannel <--> host2.pppg++; 
     host1.pppg++ <--> standardChannel <--> host3.pppg++; 
     host3.pppg++ <--> standardChannel <--> host2.pppg++; 
} 

そして私は3つのStandardHostでノードの少なくとも一方が使用するように設定omn​​etpp.iniで、このアプリ:私はこれを実行すると

[General] 
network = VoIPNetwork 

repeat = 1 
sim-time-limit = 100s 
**.networkConfiguratorModule = "" 

#Measure 
**.ppp[*].numInputHooks = 1 
**.ppp[*].inputHook[0].typename = "ThruputMeter" 
**.vector-recording = false 


# Client settings 
**.host1.numUdpApps = 1 
**.host1.udpApp[0].typename = "VoIPApp" 
**.host1.udpApp[0].destAddresses = "host2 host3" 
**.host1.udpApp[0].destPort = 5000 
**.host1.udpApp[0].localPort = 5000 
**.host1.udpApp[0].messageLength = 32B + 40B #Data: 32B, Header: 40B = 20B(IP) + 8B(UDP) + 12B(RTP) 
**.host1.udpApp[0].sendInterval = 20ms # 1000ms/20ms = 50 packets per second. 

**.host2.numUdpApps = 1 
**.host2.udpApp[0].typename = "UDPBasicApp" 
**.host2.udpApp[0].destAddresses = "host1 host3" 
**.host2.udpApp[0].destPort = 5000 
**.host2.udpApp[0].localPort = 5000 
**.host2.udpApp[0].messageLength = 32B + 40B 
**.host2.udpApp[0].sendInterval = 20ms 

**.host3.numUdpApps = 1 
**.host3.udpApp[0].typename = "UDPBasicApp" 
**.host3.udpApp[0].destAddresses = "host1 host2" 
**.host3.udpApp[0].destPort = 5000 
**.host3.udpApp[0].localPort = 5000 
**.host3.udpApp[0].messageLength = 32B + 40B 
**.host3.udpApp[0].sendInterval = 20ms 

私は次のエラーを取得する:

Error in module (omnetpp::cModule) VoIPNetwork.host1 (id=2) during network setup: Class "VoIPApp" not found -- perhaps its code was not linked in, or the class wasn't registered with Register_Class(), or in the case of modules and channels, with Define_Module()/Define_Channel(). 

私はまた、Define_Module()をRegister_Class()の代わりに使用して、同じエラーを発生させました。

私には何が欠けていますか?

+0

'VoIPApp.cc'と' VoIPApp.ned'ファイルは、別々のプロジェクトやINET 'src/inet/applications/udpapp'にどこに置いていますか? –

答えて

0

私はIDEを使ってプロジェクトを作成しました:New -> Project。これはNew -> New OMNeT++ Projectと同じではありません。

私は、いくつかの本質的なOMNeT ++のものが欠けていたと思います。悪魔は詳細です。

#include <UDPBasicApp.h> 

class VoIPApp: public UDPBasicApp { 
public: 

}; 

Define_Module(VoIPApp); 

そしてまた、あなたがいないpackage.ned標準ではなく、独自のVoIPApp.nedにVoIPAppの宣言を置く必要があります。

適切omnetプロジェクトを作成した後、VoIPApp.ccは、ちょうど<UDPBasicApp.h>を含むことができ、 :私はOMNeTを実行するために必要なのです

package voip; 

import inet.applications.udpapp.UDPBasicApp; 

simple VoIPApp extends UDPBasicApp { 
    @class(VoIPApp); 
} 

注++ 4.6とのinetではなく最新バージョンの2.6ので、インクルードがNEDファイルのパスを含めるには、今、これらのバージョンのパスに対応しています。

+0

OMNeT ++サポートなしで作成したプロジェクトをどのように構築するか説明できますか?あなたは手作業でmakefileを準備していますか、またはopp_makemakeを使っていますか?コンパイルの結果 - ライブラリまたは実行可能ファイルは何ですか? –

+0

あなたが言及したように、OMNeT ++サポートなしでプロジェクトを作成しました(新規> OMNeT ++プロジェクトの代わりに新規>プロジェクト)。理由はわかりません...これはIDEが自動的にmakefileを生成せず、あなたのプロジェクトを管理するために、プロジェクト間の依存関係、インクルードディレクトリ、図書館のパス、その他すべてのものがあなた自身であります。あなたが受け取ったエラーは、多くのことが原因である可能性があります。主に.ccファイルを追加した後、いつでもopp_makemakeを実行して、makefileをゼロから再作成する必要があります。私の提案では、IDEのサポートを使用します...(OMNeT ++プロジェクト) – Rudi

+0

申し訳ありません.New> Projectでプロジェクトを作成するのが私のエラーの一部です。上記のコードは、適切なomnetプロジェクトを作成する場合にのみ機能します。 – kunterbunt