名称混乱如何处理使用不同编译器编译的DLL和LIB 我确信我对C++名称的处理不太清楚。但是我知道C++的名字没有被搁置。所以我的问题是

名称混乱如何处理使用不同编译器编译的DLL和LIB 我确信我对C++名称的处理不太清楚。但是我知道C++的名字没有被搁置。所以我的问题是,c++,C++,思考 我使用一个编译器编译DLL或LIB。 他们试图在使用不同编译器编译的程序中使用上述DLL或LIB 那么第二个编译器如何识别函数、类、数据类型等。。在那个库或DLL里面? (我猜上面两个编译器的名字不一样) 从 没有一个标准方案,即使是平凡的C++标识符被破坏,因此不同的编译器供应商(甚至不同版本的同一编译器,或不同平台上的相同编译器)会以根本不同的方式(因此完全不兼容)来破坏公共符号。你有两个选择: 导出C++“填充”(类等),实现它们只与同一编译器(或一个专门兼容的程序,例如英特尔的微

思考 我使用一个编译器编译DLL或LIB。 他们试图在使用不同编译器编译的程序中使用上述DLL或LIB

那么第二个编译器如何识别函数、类、数据类型等。。在那个库或DLL里面?
(我猜上面两个编译器的名字不一样)


<代码>没有一个标准方案,即使是平凡的C++标识符被破坏,因此不同的编译器供应商(甚至不同版本的同一编译器,或不同平台上的相同编译器)会以根本不同的方式(因此完全不兼容)来破坏公共符号。你有两个选择:

导出C++“填充”(类等),实现它们只与同一编译器(或一个专门兼容的程序,例如英特尔的微软代码)工作。使后者正常工作通常还意味着使用相同的标准库代码(英特尔公司就是这么做的)
  • 使用指定的中性调用约定(如
    stdcall
    )仅导出C样式函数

  • 请注意,名称损坏通常是您最不关心的问题。在大多数情况下,让名字匹配实际上是相当容易的。真正的问题是不同的编译器使用不同的调用约定生成代码。如果这些不匹配(精确地),您最好希望得到的结果是程序快速、干净地崩溃。名称混乱的差异只是及早发现问题,并防止调用约定的差异破坏您的数据。

    “我猜上面两个编译器的名称混乱不同”-不。如果他们有,根本就不起作用。@H2CO3:我在读关于名称混乱的维基。它显示了每个编译器名称的样式表。所以这些风格各不相同。这是我关心的问题。根据我的经验,lib不能在不同的编译器中使用。@H2CO3:他的语法不完善。我把他理解为:
    想象一下我用一个编译器编译了DLL或LIB。然后,有人试图在使用不同编译器编译的程序中使用该DLL或LIB。
    -没有成功的故事,只是假设性的谈话?顺便说一句,我已经删除了注释,我想你以后也可以这样做;)