如何在 Solus Linux 上使用 CosmoNim (GCC)? 段错误

问题描述

我可以使用哪些方法或工具来帮助解决以下问题?

我想在 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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...