【发布时间】:2012-02-15 22:33:27
【问题描述】:
我正在尝试将一个基本的数组包装模板类编译到一个 .o 文件中,以尝试弄清楚如何制作动态库。但是,当使用
编译源代码时g++ -std=c++0x -c array.cpp
生成的文件只有 ~650 字节。我用 nm 检查了文件,发现它包含的唯一符号是
00000001 r _ZStL13allocator_arg
00000000 r _ZStL19piecewise_construct
这似乎是 C++11 编译的特性,因为在没有 -std=c++0x 标志的情况下编译它们就消失了。
试图编译程序测试代码和所有的命令
g++ -std=c++0x -o tester tester.cpp array.cpp
为 array.cpp 中的所有内容产生链接器错误,但编译干净。
老实说,我不知道这是怎么回事。如果您怀疑这是我的代码本身的问题,而不是我的编译方式,我可以发布 array.cpp 和 array.hpp 的内容。
【问题讨论】:
-
您正在尝试编译未实例化的模板?
-
模板不是代码,而是代码生成工具。只有实际的代码被编译。
-
在tester.cpp中实例化为array
;我只尝试在没有 tester.cpp 的情况下进行编译,以便弄清楚为什么我在第二个(按时间顺序排列)编译命令中出现链接器错误,尽管所有函数都在 .cpp 中。 -
模板定义必须放在头文件中。未实例化的模板不是代码,因此不会向目标文件添加任何内容。
-
啊。我现在觉得自己像个白痴 X|;我会试试的。
标签: c++ compiler-construction linker g++ c++11