【发布时间】:2014-06-23 08:56:52
【问题描述】:
我有一个类似的设置,如下所述:
项目 A
- Windows DLL
- 取决于 项目 B
项目 B
- 编译为静态库
现在,如果是全局函数,例如createNewFoo 在 Project B 中编译,它永远不会导出到最终的 DLL 中,尽管它是用 dllexport 声明的,并且最终的应用程序将它用作 dllimport:
namespace example
{
class __declspec(dllexport) Foo
{
Foo();
};
__declspec(dllexport) Foo* createNewFoo();
}
}
请注意,Foo 类总是导出到最终的 DLL 中,它唯一的全局或静态函数以某种方式被丢弃。
此外,请注意,如果在 Project A 而不是 Project B 中编译相同的全局函数,则始终会导出它。
Visual Studio 2010 中是否有任何设置允许从依赖项目中导出全局或静态函数?或者这是工具的限制?
【问题讨论】:
-
静态库不需要dllexport,只需要在项目A中包含项目B的h和lib
-
这正是我做的,项目B的header包含在项目A中,项目B的lib静态链接在项目A中。
-
对于静态库,表示B的所有函数都导入到DLL A中。
-
如果您尝试从 .dll 外部调用该函数,会出现什么错误? + 你能从 .dll 本身调用它吗?
-
是的,该函数可以在 DLL 内部使用,但不能从外部 DLL 或应用程序中使用。我收到以下链接器错误:未解析的外部符号 __declspec(dllimport) 类示例::Foo * __cdecl 示例::createNewFoo(void)"
标签: c++ visual-studio-2010 dllexport