c ++ stl map链接在不同的目录中失败

时间:2014-07-23 15:00:57

标签: c++ map stl linker dynamic-linking

我有一个名为Tplib.a的lib。它使用地图存储少量数据结构。请参阅以下内容:

typedef std::map<portNo_t, otnPortInfo_t> otnPortList_t;
otnPortList_t otnPortList;

    int mapOtnPortAdd( portNo_t portNo)
    {
      otnPortInfo_t otnPortInfo;

      memset(&otnPortInfo, 0, sizeof(otnPortInfo_t));
      otnPortInfo.portNo = portNo;
      ......
      ......
      otnPortInfo.sigDeg.state = 7;

      otnPortList[portNo] = otnPortInfo; // Problem line 

      return RET_Ok;
    }

在我将上面的lib(Tplib.a)链接到驱动程序之后编译上面的lib(Tplib.a)之后,它在运行时崩溃了otnPortList [portNo] = otnPortInfo; //问题行

但在连接Tplib.a之后的另一个目录上工作得非常好。没有崩溃。不确定是什么原因。相同的lib在一个地方而不是在另一个地方崩溃。

有关如何继续调试问题的任何帮助。每次我看到以下消息:

> map_initotn()
map_initotn [3834]: adding all port in one go
mapOtnPortAdd [3776]: portNo= 0

data translation miss
Exception current instruction address: 0x01dd8da8
Machine Status Register: 0x02029200
Data Exception Address Register: 0x5555aaba
Condition Register: 0x24000044
Exception Syndrome Register: 0x00000000
Task: 0x3423c68 "tShell"

187028 vxTaskEntry    +5c : shell (1)
 bf280 shell          +1dc: bf2a8 (1)
 bf568 shell          +4c4: execute (3423b30)
 bf754 execute        +f8 : yyparse ()
 df2bc yyparse        +ae0: dca04 (&yyval, 4f092d8, 4f092f8)
 dcc04 yystart        +b98: map_initotn() ()
1d82990 map_initotn()  +68 : mapOtnPortAdd(unsigned long) (0)
1d82664 mapOtnPortAdd(unsigned long)+bc : std::map<unsigned long, otnPortInfo_t, less<unsigned long>, __default_alloc_template<(bool)1, (int)0>>::operator [](const unsigned long  (&otnPortList, 34238e0)
1dd6998 std::map<unsigned long, otnPortInfo_t, less<unsigned long>, __default_alloc_template<(bool)1, (int)0>>::operator [](const unsigned long +90 : std::map<unsigned long, otnPortInfo_t, less<unsigned long>, __default_alloc_template<(bool)1, (int)0> ()
1dd7764 std::map<unsigned long, otnPortInfo_t, less<unsigned long>, __default_alloc_template<(bool)1, (int)0>+40 : rb_tree (3423728, &otnPortList, 3423738)
1dd8a90 rb_tree        +c8 : less<unsigned long>::operator ()(const unsigned long &, const unsigned long &) const (377f828, 3423738, 5555aaba)
tShell
 restarted.

我认为它看起来像纯粹的链接问题。 Lib Tddrv.a同样没有变化,但是当一段代码的相同代码链接在一个目录中时,它工作正常,但在另一个目录中它崩溃了。我正在使用以下工具编译器gcc.c3.4.5-p5.ppc和链接器gld.c3.4.5-p5.ppc。

0 个答案:

没有答案