6

我正在关注 JuliaAcademy ( https://github.com/JuliaAcademy ) 的一些示例代码。

我正在尝试从 Julia 中运行 C 代码。我使用的是 64 位的 Windows 10,并且在我的计算机上安装了 gcc,并且在 Atom IDE 上安装了运行 Julia。

这是我正在运行的代码片段:

using Libdl
C_code = """
#include <stddef.h>
double c_sum(size_t n, double *X) {
    double s = 0.0;
    for (size_t i = 0; i < n; ++i) {
    s += X[i];
    }
return s;
}
"""

const Clib = tempname()   # make a temporary file


# compile to a shared library by piping C_code to gcc
# (works only if you have gcc installed):

open(`gcc -fPIC -O3 -msse3 -xc -shared -o $(Clib * "." * Libdl.dlext) -`, "w") do f
    print(f, C_code)
end

# define a Julia function that calls the C function:
c_sum(X::Array{Float64}) = ccall(("c_sum", Clib), Float64, (Csize_t, Ptr{Float64}), length(X), X)

a = rand(10^7)
c_sum(a)

open gcc 命令执行,每一行代码似乎都运行良好,直到我调用 c_sum(a) 时的最后一行。

一旦我调用 c_sum() 函数,Julia 就会退出并产生以下错误消息:

Please submit a bug report with steps to reproduce this fault, and any error messages that follow (in their entirety). Thanks.
Exception: EXCEPTION_ACCESS_VIOLATION at 0x88804 -- unknown function (ip: 0000000000088804)
in expression starting at D:\Documents\Julia Projects\benchmarking.jl:67
unknown function (ip: 0000000000088804)
Allocations: 50200883 (Pool: 50186825; Big: 14058); GC: 46

我认为能够在 Julia 中运行和执行 C 函数非常有用,因此我希望能够在我的计算机上提供一个工作示例。

谁能帮我这个?也许是我使用的是 Windows PC?自从我在 Windows 机器上安装 gcc 已经有一段时间了。上面的代码是否应该与通过 MingGW 或 CygWin 安装的 gcc 一起使用?或者 Julia 是否假设您正在运行的机器是 Unix/Linux?

4

0 回答 0