问题描述
我可以使用哪些方法或工具来帮助解决以下问题?
我想在 Solus Linux 上使用 CosmoNim。它适用于其他 linux 发行版,但生成的可执行文件在 Solus Linux 上构建时会出现段错误。 CosmoNim 在 Ubuntu 上很适合我。
- CosmoNim 是使用 Cosmopolitan 的 Nim 包装器
- Cosmopolitan 是一个库和方法,用于生成使用 GCC 构建的通用二进制文件
- Nim 是 C 的转译器(使用 GCC 自动编译)
- 因此 CosmoNim 应该在许多 Linux 发行版上开箱即用(并且确实在 Ubuntu 上工作)
- 但是,在执行
objcopy
以生成完整的通用可执行文件之前,CosmoNim 无法在 Solus 上生成可运行的可执行文件(运行时的可执行文件段错误)。 - 但是! Cosmopolitan(直接使用 GCC)HelloWorld 在 Solus 上运行
- 因此,Nim 要么缺少 GCC 的一些编译或链接标志,要么正在为这个过程做一些不该做的事情
- 我如何才能在解决这个问题上取得进展?
在使用 GDB 时,它会报告段错误的 main() 函数: $ gdb hello.elf ...
Program received signal SIGSEGV,Segmentation fault.
0x0000000000413005 in NimMain ()
121 N_CDECL(void,NimMain)(void) {
这是从源文件中的第 121 行开始:
N_CDECL(void,NimMain)(void) {
void (*volatile inner)(void);
PreMain();
inner = NimMainInner;
initStackBottomWith((void *)&inner);
(*inner)();
}
int main(int argc,char** args,char** env) {
cmdLine = args;
cmdCount = argc;
gEnv = env;
NimMain();
return nim_program_result;
}
$ (gdb) 信息函数
121: void NimMain(void);
117: void NimMainInner(void);
137: void NimMainModule(void);
108: void PreMain(void);
102: void PreMainInner(void);
129: int main(int,char **,char **);
任何 GDB/编译器实用程序向导都知道如何进行内省?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)