在我被要求修改的项目中,有一段代码等于只生成一组汇编指令,将它们写入文件,然后使用gcc编译器进行编译。
我的问题是,是否有任何方法可以通过公开的API调用链接到可以为我工作的库中?我需要1-1等同于以下命令:
gcc -m32 -c -o objfile generated_asm.asm -masm = intel
答案 0 :(得分:2)
你无法做到这一点。您可以fork
GCC编译命令。它可能是特定于操作系统的,我假设您使用的是Linux(或其他POSIX系统)。
然而,还有其他选择:
libtcc
库(可以编译包含C或asm代码的字符串;注意,编译后的机器代码因未经优化而变慢)此外,您可以简单地将一些生成的C文件genfoo.c
的GCC编译分叉到共享对象(gcc -Wall -O -fPIC genfoo.c -shared -o genfoo.so
)中,然后使用dlopen ./genfoo.so
文件动态加载(另见this)
PS。下一个GCC 5.0版本将有JIT library(libgccjit
)。
答案 1 :(得分:2)
一般来说,不,因为Unix坚持认为我们将所有内容都视为文本字符串(包括命令行)。我们都接受了Unix。
从技术上讲,GCC只是一个具有大参数列表的巨型子程序。
通过文本字符串实现它是一个愚蠢的设计决定我们都是通过转储Multics和/或LISP机器来实现的。在这些系统中,子程序(甚至是大程序)都是本机调用的,因此真正构成。
使用Multics,编译器 (好吧,Multics已经死了)你可以调用的子程序。 (是的,有一个命令行界面也可以进行调用,所以人们可以调用它。)