Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to compile c code using python?

I want to build a python program that get as input a path to .c file and then it compile its.

The program will output OK to the screen if the compilation is sucessful, and BAD otherwise.

I'm been trying to google it, but could not find anything. I've been also trying to run cmd within python with an argument of the compiling program but it didn't work.

To clarify - I've already got a very specific compiler in my machine which I want to run. I dont want python to act as a compiler. Just get a code, run my compiler over it, and see what's the answer.

  • It should work on Linux server with python 2.4.

Thanks

like image 791
RanZilber Avatar asked Feb 23 '12 20:02

RanZilber


People also ask

Can you compile C code with Python?

Compile the C code into a library To compile the above C function into a library that can later be used by Python, open a terminal and change the working directory to the folder where basic_function. c is located. Then compile the library.

Can Python be as fast as C?

The Speed Issue Due to being an interpreted and dynamically typed language, Python allows for extremely fast prototyping speeds but is unable to compete with the run times of C++, C, Fortran, as well as several other compiled languages.

Why is C faster than Python?

C is a faster language compared to Python as it is compiled. Python programs are usually slower than C programs as they are interpreted. In C, the type of the various variables must be declared when they are created, and only values of those particular types must be assigned to them.


2 Answers

You can compile C code using only the standard library, and it will work on every platform and with every Python version (assuming you actually have a C compiler available). Check out the distutils.ccompiler module which Python uses to compile C extension modules. A simple example:

// main.c

#include <stdio.h>

int main() {
    printf("Hello world!\n");
    return(0);
}

Compilation script:

# build.py
from distutils.ccompiler import new_compiler

if __name__ == '__main__':
    compiler = new_compiler()
    compiler.compile(['main.c'])
    compiler.link_executable(['main.o'], 'main')

Everything else (include paths, library paths, custom flags or link args or macros) can be passed via various configuration options. Check out the above link to the module documentation for more info.

like image 170
hoefling Avatar answered Nov 07 '22 21:11

hoefling


Sure, why not? Of course, you'd need GCC installed (or llvm) so you have something to compile with. You can just use os.system, or any of the other ways for calling an external program.

Of course, you're probably better off looking at something like SCons, which already exists to solve this problem.

Plus, to answer the question actually asked, there's nothing that would prevent you from writing a compiler/assembler/linker in python, they're just programs like anything else. Performance probably wouldn't be very good though.

like image 23
Tyler Eaves Avatar answered Nov 07 '22 21:11

Tyler Eaves