一起编译多种语言

时间:2009-12-16 04:03:10

标签: compiler-construction compilation multiple-languages

是否可以将多种语言一起编译以获得最佳的不同语言。

7 个答案:

答案 0 :(得分:6)

如果编译器和链接器都是兼容的,那么在单独编译它们之后链接它们(如果适当编程)肯定是可能的。例如:

g77 -c one.f
gcc -c two.c
gcc -o together one.o two.o

这会编译一个Fortran文件,然后编译一个C文件,然后将它们链接在一个名为together的可执行文件中(假设它们正确地相互调用;-)使用GCC工具套件。

Microsoft的.NET是一种使用多种语言的流行方式 - C#,F#,IronPython,IronRuby等。 Visual Studio会将编译处理成兼容代码并在程序集中连接在一起,但如果您愿意,也可以“手动”执行。

如果通过“编译在一起”意味着在同一个文件中有多种不同的语言,那么这也是可能的,但也很少见 - 例如,某些C编译器具有扩展,允许您在同一文件中表达“内联”汇编语言。

答案 1 :(得分:3)

是的,这是可能的,但很大程度上取决于具体的语言。例如,通常会从Python调用C函数或C ++类。

答案 2 :(得分:1)

很难在C中干净利落地处理Algol-68 thunk。但是我认为我不想每天都这样做,

答案 3 :(得分:1)

.Net平台是多语言的。 Parrot很适合混合Perl,Python,Ruby。你想做什么?

答案 4 :(得分:1)

组合语言的另一个好例子是Java平台。您可以使用Java混合Groovy,Jython,JRuby,Scala,Clojure和其他语言。不同的语言需要不同的编译器,但通常可以从一种语言调用另一种语言。 Groovy和Scala特别适合互操作。

哦,Java Native Interface(JNI)允许您从Java调用C,C ++,汇编语言和其他语言。

(.NET平台共享这些相同的属性,正如其他海报所说的那样。)

答案 5 :(得分:1)

如果您使用的是.net,则可以将不同语言的项目编译为netmodules,然后将它们链接到单个dll / exe中。 Visual Studio不支持此功能,但msbuild支持。获得编译的最简单方法是编辑.csproj文件的COPY并将输出类型更改为“module”,然后针对它运行msbuild。然后使用“link”命令将模块链接到最终的exe / dll。

答案 6 :(得分:0)

看看Swig。它会覆盖您的C/C++代码,以便您可以从几乎任何其他语言调用它。