【问题标题】:EXE exports static lib exports as wellEXE 也导出静态库导出
【发布时间】:2012-05-19 13:27:50
【问题描述】:

我已经创建了一个静态库和一个 EXE 文件(它使用静态库),但是当我在 IDA pro 中打开 EXE 时,导出也列在 EXE 中。

我知道它们应该在 .lib 本身中导出,但为什么它们在 EXE 中也显示为导出?

编辑:这是一个导出/导入(它们在单独的头文件中

这里是导出:

#define NC_LIBEXPORT(a) extern "C" __declspec(dllexport) a __cdecl
NC_LIBEXPORT(VOID) rol8(unsigned char* a, unsigned char b);

和导入:

extern "C" VOID rol8(unsigned char* a, unsigned char b);

【问题讨论】:

  • 不是来自头文件,属性是附加在.lib里面的.obj文件中的标识符上。您必须构建一个特殊版本的 .lib 以防止应用 __declspec。如果您还将 .lib 链接到 DLL 中,不确定是否值得这样做,因为实际上没有任何代码会使用导出。
  • @Hans 是的,我只是以缓慢的方式解决了这个问题。通过构建一个测试项目!
  • 谢谢@HansPassant :] 做到了!没有意识到静态库不需要dllexport :] 对于这个项目,两个静态库对我来说很好。只是一个宏编辑。

标签: c++ pe-exports


【解决方案1】:

您需要确保在构建静态库时不要使用__declspec(dllexport)

如果您想在 DLL 和可执行文件中使用相同的库,并且不希望可执行文件导出符号,则需要使用 DEF 文件而不是 __declspec(dllexport)

【讨论】:

  • 我在我的可执行文件中使用了导入(第二个代码块)。
  • @Di-0xide 是的,Hans 早就知道了。我必须在 VS 中进行试验才能解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-24
  • 1970-01-01
  • 2015-04-29
  • 2023-03-15
  • 1970-01-01
  • 2010-11-04
  • 1970-01-01
相关资源
最近更新 更多