不同目录下的C++ STL映射链接失败

不同目录下的C++ STL映射链接失败,c++,map,stl,linker,dynamic-linking,C++,Map,Stl,Linker,Dynamic Linking,我有一个名为Tplib.a的lib。它使用map存储少量的数据结构。请参阅下文: typedef std::map<portNo_t, otnPortInfo_t> otnPortList_t; otnPortList_t otnPortList; int mapOtnPortAdd( portNo_t portNo) { otnPortInfo_t otnPortInfo; memset(&otnPortInfo, 0, size

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

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;
    }
编译完上面的libTplib.a之后,当我将上面的lib Tplib.a链接到一个驱动程序中时,它在运行时在otnPortList[portNo]=otnPortInfo;//问题线

但是在链接Tplib.a之后,它在另一个目录上运行得非常好。没有撞车。不知道原因是什么。同一个库在一个地方崩溃,而不是在另一个地方崩溃

如何继续调试该问题的任何帮助。每次我都会看到以下信息:

> 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。

如果没有C@deviantfan:但这可能是问题所在,根据memset调用,存在C。您是否尝试在方法开始时迭代映射并打印其内容?不管出于什么原因,可能只是映射尚未初始化。此外,我们还需要了解您的工具链平台、编译器、链接器等。如果otnPortInfo\u t不是标准布局类型,那么memset&otnPortInfo,0,sizeofotnPortInfo\u t具有未定义的行为。otnPortInfo_t otnPortInfo={};无论它是否是POD,都会做正确的事情。听起来像是构建遗留问题,您是否尝试在相应的超级树中找到所有Tplib.a,删除它们,使其干净;全部生成还是以需要调用生成/构建工具的方式生成?