【问题标题】:Linking error with g++ 3.4.4 and g++ 3.4.5与 g++ 3.4.4 和 g++ 3.4.5 的链接错误
【发布时间】:2009-05-11 16:05:36
【问题描述】:

使用:windows xp、g++ 3.4.4 和 cygwin 和 g++ 3.4.5 和 mingw。

我正在用 cppunit 编译一个简单的单元测试类。

当我使用 g++ 3.4.5 进行链接时,我得到了很多链接错误。当我与 g++ 3.4.4 链接时,我没有收到任何错误,并且 exe 链接正常并运行。

我似乎无法追查错误,所以有什么想法吗?

谢谢。

编辑:链接错误:未引用的函数错误。喜欢:

 SimpleTest.cpp:(.text+0x313): undefined reference to `CppUnit::Message::Message(std::string const&, std::string const&)'

编辑:命令行:

g++ -I g:\projects\thirdparty\cppunit-1.12.1\include -L g:\projects\thirdparty\cppunit-1.12.1\lib -l cppunitd -o main.exe main.cpp SimpleTest.cpp

更新:Visual Studio 中的相同代码:没有错误,单元测试按预期运行。

【问题讨论】:

  • 有什么错误?你的链接器命令行是什么?
  • 您似乎链接到调试库。你检查过你给它正确的预处理器定义吗?您是否链接到静态库?您可能希望将“-l cppunitd”放在 .cpp 文件之后。
  • 两者都做了,不高兴(仅供参考,我做了:-DDEBUG 在 -o ... 部分之前)。没错,对吧?

标签: g++ linker


【解决方案1】:

您的问题可能是链接行不正确。链接行matters 上的源/目标文件和库的顺序。正确的链接行:

g++ -I g:\projects\thirdparty\cppunit-1.12.1\include \
    -L g:\projects\thirdparty\cppunit-1.12.1\lib \
    -o main.exe main.cpp SimpleTest.cpp -lcppunitd

【讨论】:

  • @cbrulak 您接受了这个答案,但在 cmets 中声明这不起作用。还有什么我们在这里看不到的要解释的吗?
  • 我接受它是因为它是“最好的”,因为当时有很多关于将“最好”标记为已解决的唠叨提醒。很抱歉造成混乱。
【解决方案2】:

随着 g++ 的成熟,我在 4.2.3 上,它的类型检查变得更加迂腐,并且更好。我想说的信息很少,您可能应该仔细查看对这些方法的调用。我怀疑类型不太正确。 3.4.4 没有捕捉到它,3.4.5 捕捉到了。 ....JW

【讨论】:

  • 您有使用 cppunit 的经验吗?很多都是宏驱动的,所以我不认为我在做任何奇怪或特别的事情。
  • 这不是类型问题。该错误是链接错误,因此编译(包括类型检查)已经成功。
【解决方案3】:

您或许可以尝试的一件事是在 Linux 上使用 g++ 3.4.5 和/或 3.4.4 进行编译。如果结果相同,那么它显然是 gcc 的一个属性。否则听起来更像是一个 mingw 问题。

【讨论】:

  • 好提示。我怀疑这是mingw问题。我很难相信这个简单的测试用例会在 linux 上崩溃。
猜你喜欢
  • 1970-01-01
  • 2013-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
  • 2012-09-19
  • 1970-01-01
相关资源
最近更新 更多