尝试使用外部标头编译程序时出现问题

时间:2011-08-16 12:52:01

标签: c++ header g++ mingw

我正在学习c ++而我正在尝试使用我在程序中从互联网上下载的库(来自https://mattmccutchen.net/bigint/)。 因为我希望一切都很整洁,所以我将所有.hh文件放在名为“BI”的子文件夹中。 但是当我尝试用g ++编译我的.cpp文件时(它是Windows XP SP3上的MinGW),编译器会输出以下错误:

J:\comp proj\FS>J:\Programmi\MinGW\bin\g++.exe "J:\comp proj\FS\test.cpp" -o "J:\comp proj\FS\test.exe" -I "J:\comp proj\FS\BI" E:\DOCUME~1\MrJackV\IMPOST~1\Temp\ccidH1Z6.o:test.cpp:(.text+0x2c): undefined reference to BigInteger::BigInteger(int)' E:\DOCUME~1\MrJackV\IMPOST~1\Temp\ccidH1Z6.o:test.cpp:(.text+0x11b): undefined reference tooperator<<(std::ostream&, BigInteger const&)' E:\DOCUME~1\MrJackV\IMPOST~1\Temp\ccidH1Z6.o:test.cpp:(.text$ZNK10BigIntegermlERKS[BigInteger::operator*(BigInteger const&) const]+0x29): undefined reference to `BigInteger::multiply(BigInteger const&, BigInteger const&)' collect2: ld returned 1 exit status

我尝试使用BigInteger::BigInteger(int)' E:\DOCUME~1\MrJackV\IMPOST~1\Temp\ccidH1Z6.o:test.cpp:(.text+0x11b): undefined reference to开关来解决问题,但没有成功。 此外,我已尝试在cpp中放置-I, -l and -L,但这不起作用。

我有什么问题吗?

提前致谢。

4 个答案:

答案 0 :(得分:3)

您需要同时使用-L和-l开关。 -L指向包含库二进制文件的目录,-l表示该二进制文件

e.g。 -L / home / ed / libs -lmath

答案 1 :(得分:0)

要记住两个关键字。 Undeclared表示编译器从未听说过它。 Undefined表示编译器已经听说过它,但不确切知道如何使用它。对于那些错误,您需要告诉它与BigInteger库链接,该库应该带有标题(A * .lib文件)我很确定gcc如何包含链接库(Ed Heal说-L和-l,I “那样做。”

答案 2 :(得分:0)

您的问题是您没有链接库代码。
阅读“自述文件”,然后按照其建议调整随附的Makefile。

答案 3 :(得分:0)

好的,所以经过一番乱搞我发现我需要做几件事

  1. 使用头文件的目录添加-L开关
  2. 将所有.cc文件添加到g ++命令行中(例如g ++ test.cpp BigInteger.cc等)
  3. 将所有内容放在批处理文件中以保持简洁
  4. 哇,现在看起来很简单!