我们使用Boost构建了一个C++库,当我们尝试将库集成到二进制文件中时,由于用于构建二进制文件的“--instances = explicit”选项,因此在链接时出现问题。在显式模板实例中使用boost
问题是,当我们使用--instances = explicit选项(Sun CC编译器)时,它期望我们明确地实例化模板。由于当Boost使用此选项时,由于Boost内部使用模板,所以链接器会抛出“Undefined symbol”错误 - 这是预期的,因为我们没有明确地实例化Boost中使用的模板。
虽然我明白为什么链接器在这里抛出错误,但在代码中显式实例化所有提升模板看起来很棘手。因此,想要检查是否有任何解决方案/解决方法使用Boost和Sun CC编译器的“-instances = explicit”选项。
任何帮助,非常感谢。
我们可以用简单的示例代码重现问题 -
#include <iostream>
#include <boost/lexical_cast.hpp>
int main()
{
std::cout<<boost::lexical_cast<int>(“8”)<<std::endl;
}
随着“--instances =明确的”选项
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
没有“--instances =明确的”选项能正常工作。
出于好奇,为什么你需要'--instances = explicit'? –
诀窍是不使用instances = explicit;)Sun CC支持模板缓存我认为,这样实例化不会被冗余编译,所以我不确定为什么要使用该选项。 –
该选项用于控制模板实例化,并由此具有最少量的模板编译和最小对象大小。有没有一种方法可以显式实例化增强模板? –