【发布时间】:2013-12-16 10:23:44
【问题描述】:
我用 GCC 4.7.3 编译并链接了一个第三方库。我尝试了解触发未定义符号错误的原因:
Undefined symbols for architecture x86_64:
"void MyObject::myFunction<....>(...) const", referenced from:
void NameSpace::AnotherFunction<some_particular_arguments>(...) in some_source.cc.o
NameSpace::AnotherFunction 显然位于some_source.cc,但我可以从编译器/链接器获得一些关于在哪里/谁用some_particular_arguments 实例化此函数的信息吗?
构建是使用 CMake 完成的,并且有 NameSpace_AnotherFunction.inst 带有相应函数的模板实例化,但是这组特定的模板参数不存在。
显然some_source.cc 中没有实例化,否则我不会问;)
因此,我想知道是否有办法为函数 AnotherFunction 的特定模板参数列表获取实例化点(或类似)之类的信息?
【问题讨论】:
-
在文件中查找?,如果使用该函数的实例在可见代码中,这将起作用。如果它在需要另一个库的库上,那么您需要一些库检查工具来查找对它的引用。
-
“架构 x86_64 的未定义符号”看起来像识别不受支持的架构的链接器消息。可能是您提供的模板参数不适用于 x86_64?
-
@Raxvan 我试图在文件中找到它,但没有看到它。该函数是库的函数,不需要另一个函数。
-
@ValentinHeinitz 我会说 MyObject::MyFunction 确实没有针对特定参数进行实例化。但是,我试图找出父函数在哪里实例化(使用那些模板参数),并认为可能有一些工具/命令行选项来促进它
标签: c++ templates gcc compiler-construction linker