【发布时间】:2021-03-05 21:22:05
【问题描述】:
我从我的 linux 系统上的多个目录编写了一个 c++ 类(文件 class.h 和 class.cpp),我想在 c++ 应用程序 app.cpp 中使用它。因此,我将class.h 和class.cpp 文件移动到/usr/local/include/。我尝试使用g++ -o app app.cpp 编译app.cpp,导致undefined reference 错误(可能是因为g++ 找不到class.cpp 文件)。
我发现我可以通过将class.cpp 的内容直接写入class.h 或使用扩展命令g++ -o app app.cpp /usr/local/include/class.cpp 显式指定class.cpp 的位置来修复此错误。显然,这两种解决方案都不令人满意。
大概,经常做这些事情的人(我不是计算机科学专业的学生)可以快速解决我的问题。因此,我现在询问,而不是投入更多时间来搜索网络。
【问题讨论】:
-
在 /usr/local/lib 中托管的已编译库(共享或静态存档)中。先解决建库的问题(很明显),这是google-fu的主要素材。
-
我将文件放在
jonas/jonas/class.h和jonas/jonas/src/class.cpp中,然后消费者可以在命令行上为编译器指定-I/users/eljay/project/jonas,并通过#include "jonas/class.h"引用标题来自我自己的代码。这让我可以决定我希望 jonas 依赖项目驻留在哪里。 -
undefined reference错误与头文件无关。头文件包含函数的声明,只对编译器有意义。函数的定义属于库,对链接器很重要。undefined reference是链接器错误,而不是编译器错误。 -
@WhozCraig 谢谢你的提示。我现在有一个位于
/usr/local/lib的class.a文件,但不幸的是,g++ -o app app.cpp给出了同样的错误。有没有办法让 g++ 自动找到 class.cpp、class.o 或 class.a 文件?还是我必须像@Eljay 提出的那样明确指定它 -
您通常将文件命名为
libclass.a并将-lclass添加到链接器标志中。
标签: c++ compilation g++