我想使用Clang编译源代码,没有运行可执行文件,但是通过API在内存中编译。我发现post有关如何执行此操作但Driver
似乎在场景后面找到并运行clang
/ clang++
和ld
等可执行文件:
输出显示Driver正在调用clang来进行编译 和ld做链接。如您所见,驱动程序添加了参数 除了我们传入的那些之外,每个调用都有它自己的 -v标志显示了如何调用编译器和链接器。
由于我要在iOS上运行,因此禁止运行新进程(禁止fork
)并且路径完全不同。
那么有没有办法使用Clang API编译源代码而不运行可执行文件?
答案 0 :(得分:0)
是的,这是可能的。它是大多数OpenCL实现的工作方式 - 它们使用clang
和llvm
库来构建单个可执行文件(通常),为CL运行的硬件生成代码。我相信CUDA做的事情非常相似,但我还没有研究过。
这并不容易,但我想我可能会在几天内出现并运行,也许是最糟糕的情况。我认为最大的问题是链接。特别是如果您实际上并不想生成可执行文件,而是在内存中执行代码" - 涉及分配具有执行权限的内存,然后加载代码,这通常是链接器和加载器负责的任务。