gpt4 book ai didi

c++ - 使用 MSVC 强制导出符号

转载 作者:可可西里 更新时间:2023-11-01 18:27:01 33 4
gpt4 key购买 nike

我在 DLL 文件中有一个应用程序和几个插件。这些插件使用来自通过导出库应用。应用程序链接在几个静态库中,这是大多数符号的来源。只要应用程序使用符号,这就可以正常工作。如果那里没有使用该符号,我在编译 DLL 时会遇到链接器错误。

如何强制导出仅在插件中使用的符号?

为了触发导出,我尝试了这样的操作:

    class MyClassExporter
{
MyClass mInstance;
public:
MyClassExporter() {}
};
static MyClassExporter TheMyClassExporter;

在其中一个静态库中,应用程序是用来强制导出的,但这没有用。

响应 Greg(感谢您的回答)并澄清:我要强制导出的类是 MyClass(定义了 __declspec(...),具体取决于我要导出还是导入)。 MyClassExport 是我试图强制将未使用的(就应用程序而言)符号包含到应用程序中的尝试。我想“触摸”这些符号,以便链接器将它们识别为已使用并将它们包含到应用程序中,以便它可以依次将它们导出到我的插件中。将静态库链接到插件中不是一种选择,因为它们包含会被复制的单例(应用程序和 DLL 每个都有自己的静态变量拷贝)。

最佳答案

/INCLUDE指令可用于强制 MSVC 链接器包含一个符号。或者,/OPT:NOREF一般可用于禁止删除未使用的符号。

一种常见的方法是创建一个未使用的函数,该函数引用为您的插件导出的所有对象。那么您只需要一个/INCLUDE 指令即可实现该功能。

关于c++ - 使用 MSVC 强制导出符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/444356/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com