添加自己編寫的模塊到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爲本程序所要信賴的組件。

改正後,問題解決。






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章