C++ 防止从更高级别的DLL导出在静态库中定义的dllexport函数
我有一个静态库,其中有一个函数C++ 防止从更高级别的DLL导出在静态库中定义的dllexport函数,c++,windows,dll,dllexport,C++,Windows,Dll,Dllexport,我有一个静态库,其中有一个函数void f(),用\uu declspec(dllexport)声明。此static.lib链接到一个DLL。问题:此DLL最终导出f()(在.lib中定义),这是不需要的。这种出口能被打败吗 无论DLL中的f()的正向声明是否包含\uuu declspec(dllimport)或根本没有导出/导入指令,它都会产生影响f()以任何方式从DLL导出。Hmya,没有“oops,无意这么做”选项。让链接器选择在DLL源中定义的函数的另一个版本可能是另一种选择。但要做到正
void f()
,用\uu declspec(dllexport)
声明。此static.lib链接到一个DLL。问题:此DLL最终导出f()
(在.lib中定义),这是不需要的。这种出口能被打败吗
无论DLL中的
f()
的正向声明是否包含\uuu declspec(dllimport)
或根本没有导出/导入指令,它都会产生影响f()
以任何方式从DLL导出。Hmya,没有“oops,无意这么做”选项。让链接器选择在DLL源中定义的函数的另一个版本可能是另一种选择。但要做到正确,就需要来源,鸡和蛋也是如此。也许/EXPORT与NONAME一起使用,所以只使用ordinal导出可能会起作用,但从未尝试过。@HansPassant:如果可以使用其他名称导出此函数,或者根本不使用名称,这可能会很好地解决我的所有问题。@RustyX:实际上,共享库没有看到f()
与dllexport
,正如我在问题中解释的那样。只有静态库是使用dllexport
编译的。对不起,这意味着在没有declspec(dllexport)
的情况下重新编译静态库。链接器只是从每个输入文件(.obj和.lib)收集所有dllexport
声明,并在最终可执行文件/DLL中生成导出表。没有简单的方法可以解决这个问题。我知道你没有静态库的源代码(或者如果你有,你希望避免更改它们)。但是,您有静态库的头文件(如果有)吗(如果有,是否可以修改它)?