我正在尝试为ARM920T(架构4T)编译Python 3.2,但我遇到了一些奇怪的错误.
我正在Scratchbox环境中编译Python,配置为使用以下编译器:"gcc版本4.3.3(Sourcery G ++ Lite 2009q1-203)"这是一个arm交叉编译器.
在编译时,我确保在以下环境变量中设置-march = armv4t架构标志:CFLAGS,CPPFLAGS,SBOX_EXTRA_COMPILER_FLAGS.
它在scratchbox中编译很好,我能够使用scratchbox arm模拟器运行python解释器.
然而,当我将它移动到我的ARM920T时,我在运行python exe后立即得到了一个非法指令错误.
核心转储产生以下输出:
Program terminated with signal 4, Illegal instruction.
#0 0x00138810 in __aeabi_dadd ()
Run Code Online (Sandbox Code Playgroud)
并且后面跟踪的前几行:
#0 0x00138810 in __aeabi_dadd ()
#1 0x001134f4 in PyLong_FromString (str=0x402de300 "3644798167", pend=0x0, base=10) at Objects/longobject.c:2001
#2 0x00132478 in parsenumber (s=<value optimized out>, c=<value optimized out>) at Python/ast.c:3189
#3 ast_for_atom (n=<value optimized out>, c=<value optimized out>) at Python/ast.c:1396
#4 ast_for_power (n=<value optimized out>, c=<value optimized out>) at Python/ast.c:1726
#5 ast_for_expr (c=0xbeaf7f50, n=0x402f5b78) at …Run Code Online (Sandbox Code Playgroud) 使用 gccgo 编译可执行文件会创建一个动态链接的可执行文件,链接到 libgo.so。我在 ubuntu 20.04 上使用 gccgo-11,从 apt 中提取。
正如预期的那样,生成的可执行文件很小。一个基本的 hello world 大约需要 50Kb。
一旦我开始使用外部模块(在本例中为 viper 和 gorilla/websocket),可执行文件大小就会开始回升至原始的静态链接大小(~9MB)。如果我单独使用 go 编译(不使用 gccgo),可执行文件也约为 9MB。
在我看来,就像模块是单独静态编译的,然后静态链接到最终的可执行文件中。
我在这里忽略了什么吗?是否有一些必须启用的选项?
我希望模块依赖项也由 gccgo 编译,并动态链接到共享 libgo.so。
在ssh中,可以仅使用公钥认证为远程用户设置无密码登录.出于好奇,在设置无密码登录时,代码实际上是什么?
ssh-server守护程序是存储用户密码,然后在他们对公钥进行身份验证时自动应用它们,还是ssh-server可以使用某种系统调用魔法完全绕过用户帐户的密码验证过程?