为什么我的多文件编译的玩具示例不能编译?
Why will my toy example of multifile compilation not compile?
我一直在使用一个makefile,我从互联网上继承了足够长的时间!现在是我学会一劳永逸地编写自己的项目的时候了。所以我读了一些教程并拼凑了一个模型。它不起作用,我现在无计可施了(这通常是我来找你的时候)。
像往常一样,提前感谢大家如此博学。lib.h
#ifndef LIB_H
#define LIB_H
/** returns the integer zero (0), because the
* 0 key on my keyboard is broken.
* @pre my keyboard is broken
* @post nope, still broken
* @returns 0 */
int zero();
#endif
lib.cpp
#include "lib.h"
int zero() {
return 0;
}
project.cpp
#include "lib.h"
int main () {
int i = zero();
return 0;
}
makefile(箭头为制表符)
project: lib.o project.o
-->g++ lib.o project.o -o project
project.o: project.cpp lib.h
-->g++ -c project.cpp
lib.o: lib.cpp lib.h
-->g++ -c lib.cpp
当从命令行运行
时$ make
我得到以下错误:
g++ project.cpp
/tmp/ccWCSqSx.o: In function 'main':
project.cpp:(.text+0x9): undefined reference to 'zero()'
collect2: ld returned 1 exit status
make: *** [project.o] Error 1
这显然是我漏掉了一些关键信息的一个例子。我在谷歌上搜索过很多次,但大多数结果都是有实际问题的人,我还没能知道遗漏了什么。期待着被这个答案弄得非常尴尬,
谢谢!
错误信息给出命令行:
g++ project.cpp
注意缺少-c。这显然不在你的makefile中,尽管你认为。
看看你的错误答案:
g++ project.cpp
我可以重复你的错误。
需要执行 g++ -c
。这是在您发布的Makefile中列出的,但我认为您实际使用的Makefile中没有列出。如果没有-c
,链接器将尝试链接从cpp文件创建的目标文件。当它这样做,它不会找到外部依赖,像你的zero()
函数。
相关文章:
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么我的 EnumWindowProc 不能用 C 语言编译?
- std::unique_ptr 在 GCC 中工作,但不能在 Visual Studio 中编译
- 为什么通过指针编译时不能分配 const 初始化
- std::variant<>::get() 不能使用 Apple LLVM 10.0 编译
- 为什么使用 std::vector 的代码不能编译,但使用 std::unique_ptr 如果没有 noexcept
- 我不能用C++编译Xcode库
- 返回实例变量的c++方法可以访问变量中的数据,但不能更改它,但在编译时不会生成错误
- 为什么引用不能与编译时函数一起使用?
- 为什么我不能编译这个在Cygwin的Visual Studio中编写的C++文件?
- 为什么一个简单的"Hello World"风格的程序不能用Turbo C++编译?
- 为什么我不能编译这个简单的线程测试?
- C++程序使用 mingw 在 Linux 上交叉编译在 MSy2 中工作,但不能直接在 Windows 中工作
- 此模板函数在哪里生成?可以通过g++编译,但不能在Visual Studio中编译
- 当 pkg-config 不能解决 opencv 'undefined reference'编译问题时,如何解决它?
- 没有返回类型的静态函数可以通过Windows上的编译,但不能传递Linux上的编译
- 警告:不能解析.gnu_debugdata部分;LZMA支持在编译时被禁用
- 为什么 --string::end() 可以编译,而 --string.size() 不能编译?
- lower_bound()函数不能在调试模式下编译
- QT-不能使用外部库进行交叉编译