【问题标题】:Where do I place cpp file when header is in /usr/local/include?当标头位于 /usr/local/include 中时,我在哪里放置 cpp 文件?
【发布时间】:2021-03-05 21:22:05
【问题描述】:

我从我的 linux 系统上的多个目录编写了一个 c++ 类(文件 class.hclass.cpp),我想在 c++ 应用程序 app.cpp 中使用它。因此,我将class.hclass.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.hjonas/jonas/src/class.cpp 中,然后消费者可以在命令行上为编译器指定-I/users/eljay/project/jonas,并通过#include "jonas/class.h" 引用标题来自我自己的代码。这让我可以决定我希望 jonas 依赖项目驻留在哪里。
  • undefined reference 错误与头文件无关。头文件包含函数的声明,只对编译器有意义。函数的定义属于库,对链接器很重要。 undefined reference 是链接器错误,而不是编译器错误。
  • @WhozCraig 谢谢你的提示。我现在有一个位于/usr/local/libclass.a 文件,但不幸的是,g++ -o app app.cpp 给出了同样的错误。有没有办法让 g++ 自动找到 class.cpp、class.o 或 class.a 文件?还是我必须像@Eljay 提出的那样明确指定它
  • 您通常将文件命名为libclass.a 并将-lclass 添加到链接器标志中。

标签: c++ compilation g++


【解决方案1】:
  1. 使用g++ -c class.cppar rvs libclass.a class.o创建静态编译库(也可以在这里创建共享库)
  2. 使用g++ -o app app.cpp -lclass编译

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-05
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 2014-11-12
    • 1970-01-01
    • 2011-06-15
    相关资源
    最近更新 更多