如何重新导出CLR c ++静态库

时间:2011-04-05 12:39:54

标签: c++ visual-studio-2010 linker

我有这些文件:

  • foo.dll
  • foo.lib
  • foo.exp
  • bar.il
  • bar.netmodule

“foo”在其导出目录中定义函数。

我还有一个Visual Studio 2010 C ++项目,它将创建一个托管的“bar.dll”

我想“禁止”静态链接到“foo”和再出口来自“foo”的所有功能。

最后,我希望 bar foo 导出功能,并在 foo 中定义一些其他代码。

使用下面的代码不起作用,因为它引用了 foo ,而不是将 bar foo 合并。

#pragma comment(linker, "/include:_foomethod@12")

我该怎么做?

另请参阅:http://msdn.microsoft.com/en-us/library/f0z8kac4(v=VS.100).aspx

CFF Explorer验证导出目录:http://www.ntcore.com/exsuite.php

另请参阅:http://msdn.microsoft.com/en-us/library/k669k83h.aspx

另请参阅:http://blogs.msdn.com/b/texblog/archive/2007/04/05/linking-native-c-into-c-applications.aspx

call "C:\Program Files\Microsoft Visual Studio 10.0\VC\bin\link.exe" /DLL /LTCG /CLRIMAGETYPE:IJW   /ASSEMBLYMODULE:bar.netmodule   /OUT:bar.dll foo.lib bar.netmodule

foo.netmodule : fatal error LNK1302: only support linking safe .netmodules; unable to link ijw/native .netmodule

1 个答案:

答案 0 :(得分:0)

我已经弄清楚了。

而是需要这些文件:

  • foo.obj
  • bar.cpp
  • bar.obj

C ++ / CLI编译器cl.exe将能够编译bar,引用非托管和托管世界。

在稍后的步骤中,将使用链接器将obj文件合并为一个包含以下内容的混合模式程序集:

  • 来自foo的非托管出口
  • 来自bar的非托管导出
  • 从栏中管理IL类型

用于链接obj文件的命令:

call "C:\Program Files\Microsoft Visual Studio 10.0\VC\bin\link.exe" /DLL /LTCG /CLRIMAGETYPE:IJW     /OUT:bar.dll *.obj

额外:可以根据自己的喜好在导出目录中的cpp到obj编译后重命名导出的函数名称:)