gpt4 book ai didi

在 Julia 基准教程中编译 C 代码

转载 作者:行者123 更新时间:2023-12-03 20:25:13 25 4
gpt4 key购买 nike

this lecture 的第一个单元格中运行代码后,我正在尝试调用函数 c_sum .但是,我不断收到错误消息:

error compiling c_sum: could not load library "/tmp/juliaOT2a9V"
/tmp/juliaOT2a9V.so: wrong ELF class: ELFCLASS64
我尝试使用 gcc 标志 -m64 修改代码,但这没有帮助。我是编码新手,所以我对问题究竟是什么以及如何解决它感到相当困惑。任何帮助将不胜感激!

最佳答案

根据错误,问题似乎是您试图将 64 位共享对象 ( .so ) 文件加载到 32 位 julia 中。二进制。你的 Julia 是什么versioninfo展示?这是我的:

julia> versioninfo()
Julia Version 1.6.0-DEV.420
Commit 0d5efa8846 (2020-07-10 14:27 UTC)
Platform Info:
OS: macOS (x86_64-apple-darwin19.5.0)
CPU: Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-9.0.1 (ORCJIT, skylake)
Environment:
JULIA_EDITOR = subl
JULIA_SHELL = /bin/bash
JULIA_INPUT_COLOR = bold
JULIA_ANSWER_COLOR = light_magenta
JULIA_PKG_DEVDIR = /Users/stefan/dev
如果您的表明您正在运行 32 位 julia ,然后您可以尝试安装 64 位 julia或者尝试使用 -m32 将 C 代码编译为 32 位 ELF 共享目标文件。标志而不是 -m64旗帜。您也可以使用 file从外部检测这些文件的格式,例如这是我在我的 macOS 系统上得到的:
julia> run(`file $(Sys.which("julia"))`);
/Users/stefan/dev/julia/usr/bin/julia: Mach-O 64-bit executable x86_64

julia> run(`file $(Clib * "." * Libdl.dlext)`);
/var/folders/4g/b8p546px3nd550b3k288mhp80000gp/T/jl_ZeTKsr.dylib: Mach-O 64-bit dynamically linked shared library x86_64
由于我的 julia可执行文件和共享库文件是 Mach-O 64 位,它们是兼容的并且示例有效。在您的系统上 julia可能是 32 位的,而 gcc默认情况下生成 64 位二进制文​​件,因为您使用的是 64 位系统。一般来说,这可能是一个问题,所以即使通过了 -m32标志到 gcc解决了眼前的问题并允许您使示例工作,我建议改用 64 位 Julia 二进制文件。作为奖励,这将允许您加载比 32 位 Julia 更大的数据集,因为 64 位二进制文​​件可以寻址您计算机的所有(虚拟)内存,而不仅仅是 4GB。
历史记录:您的 64 位 Linux 机器如何/为什么在单个系统上同时运行 32 位 ELF 和 64 位 ELF 文件? 2001 年,英特尔推出了 Itanium IA-64 architecture ,这是一种纯 64 位架构,适用于高端服务器。一年后,AMD 推出了竞争产品 x86_64 architecture ,它支持两种进程模式:64 位模式和 32 位(传统)模式。因此,您可以在同一系统上使用不同的字大小运行不同的进程。 IA-64 从未真正起飞,而 x86_64 非常成功,最终英特尔也开始制造 x86_64 芯片,这可能是您的机器正在运行的,尽管它也可能是 AMD 芯片。所以现在有两种不同类型的 ELF 二进制文件,它们都可以在大多数 PC 上运行,但粒度是进程级的:你不能将 64 位共享对象加载到 32 位进程中,反之亦然。虽然您的系统可以运行 32 位进程,但由于系统主要是 64 位,大多数程序和库都将是 64 位的,这就是为什么我建议您改用 64 位 Julia build 。
有关 ELF 类型不匹配的更多信息,请访问:
  • gcc error: wrong ELF class: ELFCLASS64 .
  • 关于在 Julia 基准教程中编译 C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62936187/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com