使用LLVM 8和Clang 8。
有多个(1 + N)C程序。 1 C程序(acts行main)具有访问其他程序(N)中所有其他功能的功能。我正在使用Clang将其编译为目标文件,并将其移植到另一台机器(虽然使用相同的Flavor),并使用LLVM ORC JIT执行引擎在运行时加载对象以执行。
进程启动时,它将加载系统中所有可用的对象(1 + N)。 N中的一个C程序将有更新。我们将编译1个Sub C程序和更改后的主程序,并将其发送到系统中以供执行。执行过程将从内存中删除旧对象,并添加新对象并继续执行。
这很好。但是偶尔会发生崩溃(少于2%) SEGV(分段错误)。当对 Globals或Constant 进行访问时会发生崩溃。因此,问题似乎在数据段中。
Compiler option used during Object file creation
"clang", "clang", "-c", "-g3", "-Wunused-variable", "-O0", "-fPIC", "-fpic" ....
API Used to add object to ORC JIT
LLVMOrcCreateInstance
LLVMOrcAddObjectFile
LLVMOrcRemoveModule