运行 程序没有 Netaccel_link 错误的源文件
No source file for Netaccel_link error on running program
我有一个 OCaml 程序在 Ubuntu 16 上运行良好,但是当重新编译并在 Ubuntu 20 上运行 运行 时,我收到以下错误:-
$ ocamldebug ./linearizer
OCaml Debugger version 4.08.1
(ocd) r
Loading program... done.
Time: 89534
Program end.
Uncaught exception: Sys_error "Illegal seek"
(ocd) b
Time: 89533 - pc: 624888 - module Netaccel_link
No source file for Netaccel_link.
我认为这是因为缺少开发库,但是:-
$ sudo apt install libocamlnet-ocaml-dev
Reading package lists... Done
Building dependency tree
Reading state information... Done
libocamlnet-ocaml-dev is already the newest version (4.1.6-1build6).
0 upgraded, 0 newly installed, 0 to remove and 20 not upgraded.
我在 Ubuntu 20 上缺少什么设置步骤?
这看起来像是 libocamlnet 中的一个回归错误,你应该在那里报告一个问题,或者,我对你会得到任何回应有点悲观,你可以尝试自己调试问题。
您面临的问题与缺少库无关(它们将在安装过程中报告,或者如果包损坏,最终会出现链接器错误)。但是,它可能是由系统的某些错误配置引起的。如果那是真的,那么你很幸运,因为你可以自己修复它。
我会给你一些建议,可能会帮助你调试这个问题。更多内容,请尝试使用 discuss.ocaml.org 作为更合适的媒体(SO 不赞成这种讨论,我们可能会被管理员删除)。
对非常规文件进行查找操作时会抛出非法查找异常,又名ESPIPE
Unix 错误。所以检查你的输入。可能是以前在Ubuntu中被视为文件的东西现在是管道或套接字。
尝试使用 ltrace
或 strace
来查明罪魁祸首,例如
ltrace ./linearizer
或者,如果它让您不知所措,请尝试 strace
strace ./linearizer
您可以使用普通的 gdb
而不是 ocamldebug
。您可以使用 gdb
的接口来提供源代码的路径(尽管它很可能不会工作,因为 ocamlnet
没有使用调试信息编译)。我相信它会给你一个更有意义的回溯。
尝试使用 opam,而不是使用系统安装。使用 opam 安装您的依赖项,并尝试旧版本和新版本的 OCaml 编译器。另外,尝试不同版本的 ocamlnet。理想情况下,尝试重现曾经为您工作的环境。
当没有其他方法时,您可以使用 objdump -d
并查看二进制文件的反汇编。 OCaml 使用了一种非常易读且直观的名称修改方案 (<module_name>__<function_name>_<uid>
),因此您可以轻松找到源代码(搜索 <module_name>.ml
文件并在其中查找 <function_name>
)
最后,只需使用 docker 或任何其他容器来 运行 您的应用程序。考虑从 ocamlnet 切换到更现代和受支持的东西。
我有一个 OCaml 程序在 Ubuntu 16 上运行良好,但是当重新编译并在 Ubuntu 20 上运行 运行 时,我收到以下错误:-
$ ocamldebug ./linearizer
OCaml Debugger version 4.08.1
(ocd) r
Loading program... done.
Time: 89534
Program end.
Uncaught exception: Sys_error "Illegal seek"
(ocd) b
Time: 89533 - pc: 624888 - module Netaccel_link
No source file for Netaccel_link.
我认为这是因为缺少开发库,但是:-
$ sudo apt install libocamlnet-ocaml-dev
Reading package lists... Done
Building dependency tree
Reading state information... Done
libocamlnet-ocaml-dev is already the newest version (4.1.6-1build6).
0 upgraded, 0 newly installed, 0 to remove and 20 not upgraded.
我在 Ubuntu 20 上缺少什么设置步骤?
这看起来像是 libocamlnet 中的一个回归错误,你应该在那里报告一个问题,或者,我对你会得到任何回应有点悲观,你可以尝试自己调试问题。
您面临的问题与缺少库无关(它们将在安装过程中报告,或者如果包损坏,最终会出现链接器错误)。但是,它可能是由系统的某些错误配置引起的。如果那是真的,那么你很幸运,因为你可以自己修复它。
我会给你一些建议,可能会帮助你调试这个问题。更多内容,请尝试使用 discuss.ocaml.org 作为更合适的媒体(SO 不赞成这种讨论,我们可能会被管理员删除)。
对非常规文件进行查找操作时会抛出非法查找异常,又名
ESPIPE
Unix 错误。所以检查你的输入。可能是以前在Ubuntu中被视为文件的东西现在是管道或套接字。尝试使用
ltrace
或strace
来查明罪魁祸首,例如
ltrace ./linearizer
或者,如果它让您不知所措,请尝试 strace
strace ./linearizer
您可以使用普通的
gdb
而不是ocamldebug
。您可以使用gdb
的接口来提供源代码的路径(尽管它很可能不会工作,因为ocamlnet
没有使用调试信息编译)。我相信它会给你一个更有意义的回溯。尝试使用 opam,而不是使用系统安装。使用 opam 安装您的依赖项,并尝试旧版本和新版本的 OCaml 编译器。另外,尝试不同版本的 ocamlnet。理想情况下,尝试重现曾经为您工作的环境。
当没有其他方法时,您可以使用
objdump -d
并查看二进制文件的反汇编。 OCaml 使用了一种非常易读且直观的名称修改方案 (<module_name>__<function_name>_<uid>
),因此您可以轻松找到源代码(搜索<module_name>.ml
文件并在其中查找<function_name>
)最后,只需使用 docker 或任何其他容器来 运行 您的应用程序。考虑从 ocamlnet 切换到更现代和受支持的东西。