我有一个应用程序和DLL文件中的几个插件.插件通过导出库使用应用程序中的符号.应用程序链接在几个静态库中,这是大多数符号的来源.只要应用程序使用符号,这就可以正常工作.如果那里没有使用符号,我在编译DLL时会遇到链接器错误.
如何强制导出仅在插件中使用的符号?
为了触发导出,我尝试过这样的事情:
class MyClassExporter
{
MyClass mInstance;
public:
MyClassExporter() {}
};
static MyClassExporter TheMyClassExporter;
Run Code Online (Sandbox Code Playgroud)
在其中一个静态库中,应用程序由强制导出组成,这不起作用.
回应Greg(感谢答案)并澄清:我要强制导出的类是MyClass(已定义__declspec(...),具体取决于我想要导出或导入).MyClassExport是我试图强制将未使用的(就应用程序而言)符号包含在应用程序中.我想"触摸"符号,以便链接器将它们识别为已使用并将它们包含在应用程序中,以便它可以将这些符号导出到我的插件中.将静态库链接到插件不是一种选择,因为它们包含可复制的单例(app和DLL各自都有自己的静态变量副本).
我得到了这个 C++ 物理库Liquidfun
他们已经包含了一个用于构建 Windows 库的 Visual Studio 解决方案。当我构建它时,它给了我一个 .lib 但我想要一个 .dll 以便我可以将它与 Unity3d 一起使用。有没有办法在 Visual Studio 中更改项目的构建设置以获取 .dll 而不是 .lib?
编辑:在项目属性中更改它的非常简单的修复实际上对我有用!这可能是由于库本身写得非常好。当我在发布这个问题之前尝试同样的事情时它没有用,但这是由我的 C++ 代码问题引起的