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

标签 c++ visual-studio-2010 linker

我有这些文件:

  • foo.dll
  • foo.lib
  • foo.exp
  • bar.il
  • bar.net模块

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

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

我想“禁止”以静态链接到“foo”并重新导出“foo”的所有功能。

最后,我希望bar 导出foo 中的函数和一些在foo 中定义的附加代码。

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

#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

最佳答案

我想通了。

相反,将需要这些文件:

  • foo.obj
  • 酒吧.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 编译:)

关于c++ - 如何重新导出 CLR c++ 静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5551961/

相关文章:

c++ - 声明和定义类静态成员变量不会导致多重声明,这是为什么?

java - 将 C++ 对象实例存储在 JNI jobject 中并稍后检索

c++ - 错误:预期的类名(链接列表C++)

c# - 任何用于在新行上自动连接的 visual studio 2010 扩展?

c++ - 在标识符 ')' 之前缺少 '��'

C++ Windows Server - 如何接受 SSH 连接?

c++ - googlemock 的 EXPECT_CALL 导致 "unknown file:error: SEH exception with code 0xc0000005 thrown in the test body"

c# - 静态链接的优势

C++ 链接错误..无效?

c++ - 为什么 visual studio 2010 寻找 __thiscall 而不是 __cdecl 调用约定?