首页 > 解决方案 > 使用 map 并使用 clang 编译时未定义的引用 eeror [abi:cxx11]

问题描述

我开始研究语言解析器,在使用 std::map<std::string, std::string> 时遇到了未定义的引用

/usr/bin/ld: /home/leksoBor/Desktop/research/neuLogo/src/./rules/0000_program_base/Program.hh:106: undefined reference to `ProgramObj::envCnfgTable[abi:cxx11]'
    /usr/bin/ld: /home/leksoBor/Desktop/research/neuLogo/src/./rules/0000_program_base/Program.hh:107: undefined reference to `ProgramObj::envCnfgTable[abi:cxx11]'
    /usr/bin/ld: /home/leksoBor/Desktop/research/neuLogo/src/./rules/0000_program_base/Program.hh:108: undefined reference to `ProgramObj::envCnfgTable[abi:cxx11]'
    /usr/bin/ld: /home/leksoBor/Desktop/research/neuLogo/src/./rules/0000_program_base/Program.hh:109: undefined reference to `ProgramObj::envCnfgTable[abi:cxx11]'
    /usr/bin/ld: parser.tab.o:/home/leksoBor/Desktop/research/neuLogo/src/./rules/0000_program_base/Program.hh:113: more undefined references to `ProgramObj::envCnfgTable[abi:cxx11]' follow

这是我收到的错误消息,代码如下:

static void resetEnvCnfgTable()
  {
    envCnfgTable.insert(std::pair<std::string,std::string>("version", "0.0") );
    envCnfgTable.insert(std::pair<std::string,std::string>("description", "no description"));
    envCnfgTable.insert(std::pair<std::string,std::string>("real-type", "64-bit"));
    envCnfgTable.insert(std::pair<std::string,std::string>("whole-type", "32-bit"));
    envCnfgTable.insert(std::pair<std::string,std::string>("random-type", "mersenne"));
  };
  static void printEnvCnfgTable()
  {
    for(std::map<std::string, std::string>::iterator it = envCnfgTable.begin(); it != envCnfgTable.end(); it ++)
    {
      std::cout << it -> first << "   " << it -> second << '\n';
    } 
  };
  static std::map<std::string, std::string> envCnfgTable; 

我用:

clang++ -g -c -Wall -std=c++11  -o ../../parts/grammar/Program.o Program.cc

有什么建议么?我看到了一些类似的线程,但无法解决问题。

标签: gccclangundefined-referenceabi

解决方案


推荐阅读