C/C++开发工具AsmJit、GDC、CeGCC、U++介绍

以下为你介绍的C/C++开发工具都可用在Linux系统上:AsmJit(C/C++ 编译器)、GDC(D语言编译工具)、CeGCC(WinCE开发工具)、U++(C++ RAD平台)。

1、AsmJit(C/C++ 编译器)

AsmJit 是一个完整的 JIT(Just-In-Time,运行时刻)的针对 C++ 语言的汇编器,可以生成兼容 x86 和 x64 架构的原生代码,不仅支持整个 x86/x64 的指令集(包括传统的 MMX 和最新的 AVX2 指令集),而且提供了一套可以在编译时刻进行语义检查的 API。

AsmJit 的使用也没有任何的限制,适用于多媒体,虚拟机的后端,远程代码生成等等。

特性:

完全支持 x86/x64 指令集(包括 MMX,SSEx,AVX1/2,BMI,XOP,FMA3 和 FMA4)。

底层次和高层次的代码生成概念。

内置检测处理器特性功能。

实现虚拟内存的管理,类似于 malloc 和 free。

强大的日志记录和错误处理能力。

体积小,可直接嵌入项目,编译后的体积在150至200kb之间。

独立性强,不需要依赖其他任何的库(包括 STL 和 RTTI ) 。

环境:

1].操作系统

BSD系列、Linux、Mac、Windows。

2].C++编译器

Borland C++、Clang、GCC、MinGW、MSVC、其他的在”build.h”中文件中定义过的编译器。

3].后端

X86、X64。

代码:

// Create simple DWORD memory copy function for 32 bit x86 platform:

// (for AsmJit version 0.8+)

//

// void ASMJIT_CDECL memcpy32(UInt32* dst, const UInt32* src, SysUInt len);

// AsmJit library

#include <AsmJit/AsmJitAssembler.h>

#include <AsmJit/AsmJitVM.h>

// C library - printf

#include <stdio.h>

using namespace AsmJit;

// This is type of function we will generate 

typedef void (*MemCpy32Fn)(UInt32*, const UInt32*, SysUInt);

int main(int argc, char* argv[])

{

//

// Part 1:

// Create Assembler

Assembler a;

// Constants

const int arg_offset = 8; // Arguments offset (STDCALL EBP)

const int arg_size = 12;  // Arguments size

// Labels

Label L_Loop;

Label L_Exit;

// Prolog

a.push(ebp);

a.mov(ebp, esp);

a.push(esi);

a.push(edi);

// Fetch arguments

a.mov(edi, dword_ptr(ebp, arg_offset + 0)); // get dst

a.mov(esi, dword_ptr(ebp, arg_offset + 4)); // get src

a.mov(ecx, dword_ptr(ebp, arg_offset + 8)); // get len

// exit if length is zero

a.jz(&L_Exit);

// Bind L_Loop label to here

a.bind(&L_Loop);

a.mov(eax, dword_ptr(esi));

a.mov(dword_ptr(edi), eax);

a.add(esi, 4);

a.add(edi, 4);

// Loop until ecx is not zero

a.dec(ecx);

a.jnz(&L_Loop);

// Exit

a.bind(&L_Exit);

// Epilog

a.pop(edi);

a.pop(esi);

a.mov(esp, ebp);

a.pop(ebp);

// Return  

a.ret();

//

//

// Part 2:

// Make JIT function

MemCpy32Fn fn = function_cast<MemCpy32Fn>(a.make());

// Ensure that everything is ok

if (!fn)

{

printf("Error making jit function (%u).\n", a.error());

return 1;

}

// Create some data

UInt32 dst[128];

UInt32 src[128];

// Call JIT function

fn(dst, src, 128);

// If you don't need the function anymore, it should be freed

MemoryManager::global()->free((void*)fn);

//

return 0;

}

下载地址:https://github.com/asmjit/asmjit

2、GDC(D语言编译工具)

GDC 是 D 编程语言的 GCC 前端编译工具。

3、CeGCC(WinCE开发工具)

cegcc是一个跨平台的WindowsCE的应用开发环境(掌上电脑),从Linux的PC机或cygwin所在。

下载地址:https://sourceforge.net/projects/cegcc/

4、U++(C++ RAD平台)

C/C++开发工具AsmJit、GDC、CeGCC、U++介绍

Ultimate++是C++跨平台快速应用程序开发框架-U++是一个开源的跨平台C++ RAD平台,作者从98年就开始开发,到今年持续了十一年了。U++一直都是一个非常非常小众的开发平台,几乎没什么人用,与当今火红的几个开源C++ Framewrok比如wxwidgets、QT等相比,它实在是被人冷落的可以。换做旁人早就歇菜了,在SourceForge上搜一下,能搜出一堆半路夭折的C++Framework。而U++ 却仍在不断的开发中,可算是特立独行。

U++的作者是捷克人Mirek Fidler和Tomas Rylek,Mirek现在非常活跃,平台的开发及网站的维护主要是他在做。U++的用户也主要集中在东欧地区,象俄罗斯,罗马尼亚,波兰等且用户群很小。不过U++倒是提供了非常完整的国际化支持,它的语言包里囊括了很多国家及地区的语言,包括中文(简体,繁体都有)。不过中文语言包似乎很老,内容不是很完整。

C/C++开发工具AsmJit、GDC、CeGCC、U++介绍

U++在生产级别上支持的平台有:Windows、macOS、GNU/Linux和FreeBSD。

用纯英语下载Ultimate++可以获得什么?

非常有效的C++库,用于以源代码形式进行跨平台开发。

一个良好的集成开发环境,旨在开发大型C++应用程序。

您可以同时使用它们,也可以使用所需的任何一种。

下载地址:https://www.ultimatepp.org/

注明

以上就是C/C++开发工具AsmJit、GDC、CeGCC、U++的介绍内容,这些C/C++开发工具都能使用在Linux操作系统中。

栏目相关文章