C++模板dll =>未解决的外部因素
我在共享库中有一个模板函数。我知道该函数将使用 int 或 double 参数调用。因此,我在源文件中实例化了模板的两个版本。
template void library::doSomething<int>(int const number);
template void library::doSomething<double>(double const number);
该解决方案适用于 Linux 上的 g++(获取 *.so),但是当我尝试使用 VS2010 在 Windows 上将相同的代码编译为 *.dll 时,我收到如下错误:
错误LNK2001:无法解析的外部符号doSomething
导出在 *.def 文件中提供,例如:
出口
做某事
我是否缺少某些内容或者此解决方案与 Windows“不兼容”?
谢谢。
彼得
I have a template function in a shared library. I know the function will be called with either int or double arguments. I therefore instantiate the two versions of the template in the source file.
template void library::doSomething<int>(int const number);
template void library::doSomething<double>(double const number);
This solution works with g++ on Linux (getting a *.so), but when I try to compile the same code into a *.dll on Windows using VS2010 I get an error like this:
error LNK2001: unresolved external symbol doSomething
Exports are provided in a *.def file like:
EXPORTS
doSomething
Am I missing something or is this solution "incompatible" with Windows?
Thanks.
Petr
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您需要将实例化函数的损坏名称放入 DEF 文件中,而不是 C++ 名称。
您可以在 MSDN 文章使用 DEF 文件从 DLL 导出:
通常,使用 __declspec(dllexport) 更加简单,如果您可以使用它,您应该考虑这样做。
You need to put the mangled names of the instantiated functions into the DEF file, not the C++ names.
You can find out more in the MSDN article Exporting from a DLL Using DEF Files:
Usually, using
__declspec(dllexport)
is much more straightforward and if you can use it you should consider doing so.