添加自己编写的模块到ns-3中出现undefined reference to问题的解决

添加自己编写的模块到ns-3中出现undefined reference to问题的解决

向ns-3添加一个vanet模块,其中一个例子,在examples目录下, vanet-highway-test.cc

编译的时候,出现问题:

[1634/1751] cxx_link: build/debug/src/vanet/examples/vanet-highway-test_1.o -> build/debug/src/vanet/examples/vanet-highway-test
debug/src/vanet/examples/vanet-highway-test_1.o: In function `Start':
/home/gpf/repos/ns-3-allinone/ns-3-dev/build/../src/vanet/examples/vanet-highway-test.cc:50: undefined reference to `ns3::Highway::Start()'
debug/src/vanet/examples/vanet-highway-test_1.o: In function `Stop':
/home/gpf/repos/ns-3-allinone/ns-3-dev/build/../src/vanet/examples/vanet-highway-test.cc:55: undefined reference to `ns3::Highway::Stop()'
debug/src/vanet/examples/vanet-highway-test_1.o: In function `main':
/home/gpf/repos/ns-3-allinone/ns-3-dev/build/../src/vanet/examples/vanet-highway-test.cc:164: undefined reference to `ns3::Controller::SetHighway(ns3::Ptr<ns3::Highway>)'


这个问题,困扰了我一天多时间,不停地查资料,不停地修改。
因为在 vanet-highway-test.cc 中,已经包含了
#include "ns3/highway.h"
#include "ns3/controller.h"
也就是说,已经包含了ns3::Highway和ns3::Controller这两个类,理论上讲,不存在未定义问题。

后来,不断在网上查询,不断地找方法,终于找到了问题来源。
问题在于examples目录下wscript文件中,没有包含 ns3::Highway和ns3::Controller 所有的模块。

旧wscript为:
def build(bld):
    if not bld.env['ENABLE_EXAMPLES']:
        return;

    obj = bld.create_ns3_program('vanet-highway-test',
        ['core', 'mobility', 'network', 'wifi'])
    obj.source = 'vanet-highway-test.cc'

修改 obj = bld.create_ns3_program 中,添加了 自己编写的组件名 vanet
改正为:
def build(bld):
    if not bld.env['ENABLE_EXAMPLES']:
        return;

    obj = bld.create_ns3_program('vanet-highway-test',
        ['core', 'mobility', 'network', 'wifi', 'vanet'])
    obj.source = 'vanet-highway-test.cc'
 

其中  bld.create_ns3_program为编译程序, vanet-highway-test 为编译后的程序名。  
后面的 core,mobility,network,wifi,vanet为本程序所要信赖的组件。

改正后,问题解决。






你可能感兴趣的:(function,Build,NetWork,reference)