链接器输入文件未使用,因为链接未完成,我无法获取 .o
linker input file unused because linking not done, I can't get .o
我有一个二叉树模板 class,tree.tpp 和 tree.h。我用 class 做了一个测试,但我无法编译它
#include <cstdlib>
#include <iostream>
#include "arbolbinario.h"
using namespace std;
int main(int argc, char** argv) {
ArbolBinario<int> pila(45);
return 0;
}
我在执行时遇到以下错误:g++ -c -o ./tree.o ./tree.tpp -I ./tree.h
g++:警告:./tree.tpp:链接器输入文件未使用,因为链接未完成
(我正在使用 netbeans)
-c
标志告诉 GCC 只编译输入源文件,不做任何linking。
如果您希望编译器link将目标文件转换为可执行二进制文件,您需要删除-c
标志。
.tpp
不是 g++
识别的文件结尾之一,请参阅 its documentation。
因此g++
假设您希望将文件直接传递给linker。但是因为你使用了 -c
标志,这表明你希望 g++
只编译,但是 而不是 调用 linker,你明白了错误信息。
解决方法是明确地告诉g++
你传递的是什么类型的文件:
g++ -c -o ./tree.o -x c++ ./tree.tpp -I ./tree.h
或者,更好的是,重命名您的 C++ 源文件,使用 C++ 源文件的常见文件结尾之一,例如.cpp
、.cc
、.cxx
等。这将减少构建工具的麻烦,并减少其他查看您的项目的混淆。
如问题评论中所述,-I ./tree.h
也显然是错误的,但不是导致此特定错误的原因(可能它根本不属于那里)。
然而:
如果您的 .tpp
包含 class 模板方法的实现,那么您应该 而不是 重命名它(.tpp
是合适的在那种情况下),但你也应该 而不是 将其编译为翻译单元。这意味着它不应该出现在任何g++
命令中。
.tpp
实现模板 classes 方法的文件需要包含在具有 class 模板定义的 .h
文件中。否则,稍后当您尝试 link 您的文件时会出现 linker 错误,请参阅 Why can templates only be implemented in the header file?。
我有一个二叉树模板 class,tree.tpp 和 tree.h。我用 class 做了一个测试,但我无法编译它
#include <cstdlib>
#include <iostream>
#include "arbolbinario.h"
using namespace std;
int main(int argc, char** argv) {
ArbolBinario<int> pila(45);
return 0;
}
我在执行时遇到以下错误:g++ -c -o ./tree.o ./tree.tpp -I ./tree.h
g++:警告:./tree.tpp:链接器输入文件未使用,因为链接未完成
(我正在使用 netbeans)
-c
标志告诉 GCC 只编译输入源文件,不做任何linking。
如果您希望编译器link将目标文件转换为可执行二进制文件,您需要删除-c
标志。
.tpp
不是 g++
识别的文件结尾之一,请参阅 its documentation。
因此g++
假设您希望将文件直接传递给linker。但是因为你使用了 -c
标志,这表明你希望 g++
只编译,但是 而不是 调用 linker,你明白了错误信息。
解决方法是明确地告诉g++
你传递的是什么类型的文件:
g++ -c -o ./tree.o -x c++ ./tree.tpp -I ./tree.h
或者,更好的是,重命名您的 C++ 源文件,使用 C++ 源文件的常见文件结尾之一,例如.cpp
、.cc
、.cxx
等。这将减少构建工具的麻烦,并减少其他查看您的项目的混淆。
如问题评论中所述,-I ./tree.h
也显然是错误的,但不是导致此特定错误的原因(可能它根本不属于那里)。
然而:
如果您的 .tpp
包含 class 模板方法的实现,那么您应该 而不是 重命名它(.tpp
是合适的在那种情况下),但你也应该 而不是 将其编译为翻译单元。这意味着它不应该出现在任何g++
命令中。
.tpp
实现模板 classes 方法的文件需要包含在具有 class 模板定义的 .h
文件中。否则,稍后当您尝试 link 您的文件时会出现 linker 错误,请参阅 Why can templates only be implemented in the header file?。