Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将boost与显式模板实例一起使用 我们使用Boost构建了一个C++库,当我们试图将二进制文件库集成在一起时,我们会遇到链接问题,因为“二进制-显式”选项用于构建二进制。p>_C++_Boost - Fatal编程技术网

将boost与显式模板实例一起使用 我们使用Boost构建了一个C++库,当我们试图将二进制文件库集成在一起时,我们会遇到链接问题,因为“二进制-显式”选项用于构建二进制。p>

将boost与显式模板实例一起使用 我们使用Boost构建了一个C++库,当我们试图将二进制文件库集成在一起时,我们会遇到链接问题,因为“二进制-显式”选项用于构建二进制。p>,c++,boost,C++,Boost,问题是,当我们使用--instances=explicit选项(Sun CC编译器的)时,它希望我们显式地实例化模板。由于Boost在内部使用模板,当我们将Boost与此选项一起使用时,链接器会抛出“Undefined symbol”错误——这是预期的,因为我们没有显式实例化Boost中使用的模板 虽然我理解链接器在这里抛出错误的原因,但在代码中显式实例化所有boost模板看起来很棘手。因此,希望检查是否有任何解决方案/解决方案可以使用Boost和Sun CC编译器的“-instances=ex

问题是,当我们使用--instances=explicit选项(Sun CC编译器的)时,它希望我们显式地实例化模板。由于Boost在内部使用模板,当我们将Boost与此选项一起使用时,链接器会抛出“Undefined symbol”错误——这是预期的,因为我们没有显式实例化Boost中使用的模板

虽然我理解链接器在这里抛出错误的原因,但在代码中显式实例化所有boost模板看起来很棘手。因此,希望检查是否有任何解决方案/解决方案可以使用Boost和Sun CC编译器的“-instances=explicit”选项

非常感谢您的帮助

我们可以用简单的示例代码重现这个问题,如下所示-

#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