链接器输入文件未使用,因为链接未完成,我无法获得.o
linker input file unused because linking not done, I can't get .o
我有一个二叉树的模板类,tree.tpp 和 tree.h。我已经对类进行了测试,但无法编译
#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:链接器输入文件未使用,因为链接未完成
(我正在使用网络豆(
.tpp
不是g++
识别的文件结尾之一,请参阅其文档。
因此,g++
假定您希望将文件直接传递到链接器。但是,由于您使用了-c
标志(该标志指示您希望g++
仅编译而不调用链接器(,因此会收到该错误消息。
解决方案是告诉g++
您显式传递它的文件类型:
g++ -c -o ./tree.o -x c++ ./tree.tpp -I ./tree.h
或者,更好的是,重命名C++源文件,使用C++源文件的常见文件结尾之一,例如.cpp
、.cc
、.cxx
等这将减少构建工具的麻烦,并减少其他人查看您的项目的困惑。
正如问题评论中所述-I ./tree.h
显然也是错误的,但不是这个特定错误的原因(可能它根本不属于那里(。
但是:
如果你的.tpp
包含类模板的方法的实现,那么你不应该重命名它(在这种情况下.tpp
是合适的(,但也不应该把它编译为翻译单元。这意味着它不应该出现在任何g++
命令中。
.tpp
实现模板类方法的文件需要包含在.h
文件中,而应改为包含类模板定义。否则,稍后尝试链接文件时会出现链接器错误,请参阅为什么只能在头文件中实现模板?。
-c
标志告诉 GCC 只编译输入源文件,不执行任何链接。
如果希望编译器将目标文件链接到可执行二进制文件,则需要删除-c
标志。
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- CMake-按正确顺序将项目与C运行时对象文件链接
- 从链接列表c++中删除一个项目
- 有根的二进制搜索树.保留与其父级的链接
- 读取文件的最后一行并输入到链接列表时出错
- 静态数据成员的问题-修复链接错误会导致编译器错误
- node-gyp 在 macOS 上未正确链接库
- 基于boost的程序的静态链接——zlib问题
- 无法链接 CMake 中的本地库
- 内联函数中具有内部链接的全局变量
- 链接阶段在Ubuntu上失败,但在MacOS上失败
- 使用gcc从静态链接的文件中查找可选符号
- 链接器输入文件未使用,因为链接未完成,我无法获得.o
- 链接 openGL 库失败,因为它无法打开 libgl.so ...但它就在那里
- 链接webrtc本机时出错,因为未定义对具有std::string的方法的引用
- dll从VC++导入到VB函数的转换从dll返回错误,因为缺少链接库
- 链接器输入文件未使用,因为链接尚未完成
- g++.exe[警告]链接器输入文件未使用,因为链接未完成
- c++链接错误2019无法解决的外部符号虚拟错误,因为接口…(?)
- 链接错误使用 CMake 在C++中创建共享库,因为符号的多重定义