1

我是 SystemC 的新手,我只是使用教程编译了它,以便在 VS2010 中使用它。但是当我尝试调试以下程序时:

#include <systemc.h>

SC_MODULE (systemcTest) {
SC_CTOR (systemcTest) {

}
void say_hello() {
    cout << "Hello World.\n";
}
};
int sc_main(int argc, char* argv[]) {
systemcTest hello("HELLO");
hello.say_hello();
return(0);
}

我收到了类似于以下错误的 51 个错误:

error LNK2005: "public: void __thiscall std::basic_ios<char,struct std::char_traits<char> >::setstate(int,bool)" (?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z) already defined in SystemC.lib(sc_simcontext.obj) \msvcprtd.lib(MSVCP100D.dll)

大多数与 msvcprtd.lib、libcmtd.lib 有关。如何解决这个问题?

4

1 回答 1

1

这主要与用于编译 SystemC 库 (SystemC.lib) 和您的 SystemC 项目的项目的不同 MS 运行时库有关。使用 MS 编译器,有 4 个不同的运行时库:

  • 多线程 (/MT) --> LIBCMT.lib
  • 多线程调试 (/MTd) --> LIBCMTD.lib
  • 多线程 DLL (/MD) --> MSVCRT.lib,MSVCPRT.lib + MSVCR100.DLL,MSVCP100.DLL
  • 多线程调试 DLL (/MDd) --> MSVCRTD.lib,MSVCPRTD.lib + MSVCR100D.DLL,MSVCP100D.DLL

您似乎使用 /MDd 来编译 SystemC.lib,但您使用 /MTd 来编译 SystemC 项目。你可以纠正它:

从属性页中选择配置属性 ==> C/C++ ==> 代码生成 ==> 运行时库 ==> 多线程调试 DLL (/MDd)。

可以在此处找到类似的线程:Visual C++ 中多个项目之间的链接器错误

于 2013-10-11T20:04:45.563 回答