将boost与显式模板实例一起使用 我们使用Boost构建了一个C++库,当我们试图将二进制文件库集成在一起时,我们会遇到链接问题,因为“二进制-显式”选项用于构建二进制。p>
问题是,当我们使用--instances=explicit选项(Sun CC编译器的)时,它希望我们显式地实例化模板。由于Boost在内部使用模板,当我们将Boost与此选项一起使用时,链接器会抛出“Undefined symbol”错误——这是预期的,因为我们没有显式实例化Boost中使用的模板 虽然我理解链接器在这里抛出错误的原因,但在代码中显式实例化所有boost模板看起来很棘手。因此,希望检查是否有任何解决方案/解决方案可以使用Boost和Sun CC编译器的“-instances=explicit”选项 非常感谢您的帮助 我们可以用简单的示例代码重现这个问题,如下所示-将boost与显式模板实例一起使用 我们使用Boost构建了一个C++库,当我们试图将二进制文件库集成在一起时,我们会遇到链接问题,因为“二进制-显式”选项用于构建二进制。p>,c++,boost,C++,Boost,问题是,当我们使用--instances=explicit选项(Sun CC编译器的)时,它希望我们显式地实例化模板。由于Boost在内部使用模板,当我们将Boost与此选项一起使用时,链接器会抛出“Undefined symbol”错误——这是预期的,因为我们没有显式实例化Boost中使用的模板 虽然我理解链接器在这里抛出错误的原因,但在代码中显式实例化所有boost模板看起来很棘手。因此,希望检查是否有任何解决方案/解决方案可以使用Boost和Sun CC编译器的“-instances=ex
#include <iostream>
#include <boost/lexical_cast.hpp>
int main()
{
std::cout<<boost::lexical_cast<int>(“8”)<<std::endl;
}
#包括
#包括
int main()
{
std::cout您不能将显式模板实例化和高级模板编程结合起来。甚至不要尝试
历史上,其他语言,如艾达,在C++之前有模板,但是它们使用显式模板实例化。C++是使用隐式模板实例化的第一主流语言。这使得现代模板编程技术成为可能。如果没有隐式模板实例化,就不会有STL和Boost。错误消息告诉您必须显式实例化哪个模板(例如,Boost::detail::lexical_cast
)这将是一个很大的工作,但是嘿,你答应了编译器去做。出于好奇,为什么你需要--instances=explicit
?诀窍是不要使用instances=explicit;)Sun CC支持一个模板缓存,我想,这样实例化就不会被冗余编译,所以我不确定你为什么要使用这个选项。这个选项是我们控制模板实例化,从而使模板编译量最少,对象大小最小。有没有一种方法可以显式实例化boost模板?
Undefined first referenced
symbol in file
__type_0 boost::detail::lexical_cast<unsigned,std::string,false,char>(__type_0,__type_3*,unsigned) lexical.o
ld: fatal: Symbol referencing errors. No output written to a.out