Ocaml 运行程序时没有Netaccel_链接错误的源文件

Ocaml 运行程序时没有Netaccel_链接错误的源文件,ocaml,Ocaml,我有一个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 T

我有一个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中的一个回归错误,你应该在那里报告一个问题,或者,我有点悲观,你会得到任何响应,你可以尝试自己调试这个问题

您面临的问题与缺少库无关(它们将在安装过程中报告,或者,如果包损坏,最终导致链接器错误)。然而,这可能是由于系统的某些错误配置造成的。如果这是真的,那么你很幸运,因为你可以自己修复它

我将给您一些建议,可能有助于您调试此问题。更多信息,请尝试将其用作更合适的媒体(因此不支持此类讨论,我们可能会被管理员删除)

  • 当对非常规文件(也称为
    ESPIPE
    Unix错误)应用seek操作时,将引发非法seek异常。所以请检查您的输入。可能是以前在Ubuntu中被视为文件的东西现在变成了管道或套接字

  • 尝试使用
    ltrace
    strace
    来查明罪犯,例如

  • 或者,如果它压倒了你,试试
    strace

    strace ./linearizer
    
  • 您可以使用普通的
    gdb
    而不是使用
    ocamldebug
    。您可以使用
    gdb
    的接口来提供源代码的路径(尽管它很可能无法工作,因为
    ocamlnet
    没有使用调试信息编译)。我相信这会给你一个更有意义的回溯

  • 尝试使用opam,而不是使用系统安装。使用opam安装依赖项,并尝试OCaml编译器的旧版本和新版本。另外,尝试不同版本的ocamlnet。理想情况下,试着重现曾经为你工作的环境

  • 当其他方法都不起作用时,可以使用
    objdump-d
    查看二进制文件的反汇编。OCaml使用了一种非常可读和直观的名称篡改方案(
    \uuuuuuu
    ),因此您可以很容易地找到源代码(搜索
    .ml
    文件并在那里查找

  • 最后,只需使用docker或任何其他容器来运行应用程序。考虑从OCMLNET切换到更现代和支持的东西。


  • 这看起来像是libocamlnet中的一个回归错误,您应该在那里报告一个问题,或者,我有点悲观,您将得到任何响应,您可以尝试自己调试这个问题

    您面临的问题与缺少库无关(它们将在安装过程中报告,或者,如果包损坏,最终导致链接器错误)。然而,这可能是由于系统的某些错误配置造成的。如果这是真的,那么你很幸运,因为你可以自己修复它

    我将给您一些建议,可能有助于您调试此问题。更多信息,请尝试将其用作更合适的媒体(因此不支持此类讨论,我们可能会被管理员删除)

  • 当对非常规文件(也称为
    ESPIPE
    Unix错误)应用seek操作时,将引发非法seek异常。所以请检查您的输入。可能是以前在Ubuntu中被视为文件的东西现在变成了管道或套接字

  • 尝试使用
    ltrace
    strace
    来查明罪犯,例如

  • 或者,如果它压倒了你,试试
    strace

    strace ./linearizer
    
  • 您可以使用普通的
    gdb
    而不是使用
    ocamldebug
    。您可以使用
    gdb
    的接口来提供源代码的路径(尽管它很可能无法工作,因为
    ocamlnet
    没有使用调试信息编译)。我相信这会给你一个更有意义的回溯

  • 尝试使用opam,而不是使用系统安装。使用opam安装依赖项,并尝试OCaml编译器的旧版本和新版本。另外,尝试不同版本的ocamlnet。理想情况下,试着重现曾经为你工作的环境

  • 当其他方法都不起作用时,可以使用
    objdump-d
    查看二进制文件的反汇编。OCaml使用了一种非常可读和直观的名称篡改方案(
    \uuuuuuu
    ),因此您可以很容易地找到源代码(搜索
    .ml
    文件并在那里查找

  • 最后,只需使用docker或任何其他容器来运行应用程序。考虑从OCMLNET切换到更现代和支持的东西。