【问题标题】:Problems trying to compile a program with external header尝试使用外部头文件编译程序时出现问题
【发布时间】:2011-10-28 01:16:45
【问题描述】:

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

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

我尝试使用-I, -l and -L 开关来解决问题,但没有成功。 此外,我尝试在 cpp 中输入#include "BI/BigIntegerLibrary.hh",但没有成功。

是不是我做错了什么?

提前致谢。

【问题讨论】:

    标签: c++ header g++ mingw


    【解决方案1】:

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

    例如-L/home/ed/libs -lmath

    【讨论】:

    • 在哪里可以找到库名称?编辑:ld 说“找不到 -lBigIntegerLibrary”
    • 这是你安装它的地方。寻找 libBigIntegerlibrary.so 或 libBigIntegerlibrary.a
    • 没有那种东西,只有.hh文件,是不是也要编译一下?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您的问题是您没有链接到库代码。
      阅读“README”,然后按照其建议修改随附的 Makefile。

      【讨论】:

      • 对不起,我的无知,但你所说的“改编makefile”是什么意思?编辑:好的,我重新阅读了自述文件,它讲述了生成文件。还有什么我可以用来编译 .cc 文件的东西吗? (我在窗户里)
      • P.S.您能否给我链接一个解释如何执行所有这些操作的教程?
      • @MrJackV:我不知道你对make完全不熟悉。总是有 Visual C++ Express Edition - 它可以从 Microsoft 免费下载。我不知道make 有任何好的教程,但是谷歌搜索“用 make 编译”出现了很多点击。不过,VC++EE 可能会让你走得更快。那里可能有大量的教程。
      【解决方案4】:

      好的,经过一番折腾后,我发现我需要做几件事

      1. 在头文件的目录中添加 -L 开关
      2. 将所有 .cc 文件(例如 g++ test.cpp BigInteger.cc 等)添加到 g++ 命令行
      3. 为了简洁起见,将所有内容放在一个批处理文件中

      哇,现在看起来很容易!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-23
        • 2011-10-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多