C++ 防止在静态库中隐式实例化std::string/std::wstring
我已经编写了一个示例静态库。C++ 防止在静态库中隐式实例化std::string/std::wstring,c++,c++11,templates,stdstring,wstring,C++,C++11,Templates,Stdstring,Wstring,我已经编写了一个示例静态库。 我想抑制std::string/std::wstring的隐式实例化。我引用了这一点,并声明了模板类std::basic_string(extern template)的显式实例化。我希望静态库不会包含std::basic_字符串的任何符号。但是dumpbin实用程序显示库中存在基本字符串的符号。 代码如下: // testLib.h #pragma once namespace staticLib{ void TestLib(); } // t
我想抑制std::string/std::wstring的隐式实例化。我引用了这一点,并声明了模板类std::basic_string(extern template)的显式实例化。我希望静态库不会包含std::basic_字符串的任何符号。但是dumpbin实用程序显示库中存在基本字符串的符号。 代码如下:
// testLib.h
#pragma once
namespace staticLib{
void TestLib();
}
// testLib.cpp
#include < string >
#include "testLib.h";
//Explicit instantiation declaration
extern template class std::basic_string< char> ; // Is this correct?
namespace staticLib {
void TestLib() {
std::string str = "Testing";
str.size();
str.erase();
}
}
//testLib.h
#布拉格语一次
命名空间静态库{
void TestLib();
}
//testLib.cpp
#包括
#包括“testLib.h”;
//显式实例化声明
外部模板类std::basic_string;//这是正确的吗?
命名空间静态库{
void TestLib(){
std::string str=“测试”;
str.size();
str.erase();
}
}
dumpbin日志:
我的问题如下:
// testLib.h
#pragma once
namespace staticLib{
void TestLib();
}
// testLib.cpp
#include < string >
#include "testLib.h";
//Explicit instantiation declaration
extern template class std::basic_string< char> ; // Is this correct?
namespace staticLib {
void TestLib() {
std::string str = "Testing";
str.size();
str.erase();
}
}
“我想抑制std::string/std::wstring的隐式实例化”为什么?我希望显式实例化声明发生得很晚,并且
string
已经隐式实例化了…@dyp。谢谢你的评论。我正在尝试将静态库与DLL(比如DLL a)链接。此DLL再次链接到另一个DLL(例如DLL abc)。DLL abc显式实例化std::basic_字符串并继承它。在链接过程中,对于静态库和DLL abc的std::basic_字符串的某些方法,我得到了链接器错误。发生这种情况的原因是,它们都有std::basic_string的符号。因此,我想从静态库中抑制符号。我不能修改abc.dll该问题与问题类似。谢谢你@dyp