以下代码是一个简单的实现过程,问题出现在最后的ccall调用步骤。
using Libdl
# 代码文本
C_code = raw"""
#include<stdio.h>
int main()
{
printf("Hello World!");
return 0;
}
"""
# 获取已定义的环境变量
env_path = ENV["LD_LIBRARY_PATH"]
# 需要用const声明
const clibname = "test"
const Clib = joinpath(env_path, clibname)
# 编译过程,生成dll文件
open(`gcc -fPIC -O3 -msse3 -xc -shared -o $(Clib * "." * Libdl.dlext) -`, "w") do f
print(f, C_code)
end
# 目前卡到这里了
test() = ccall(
(:main, clibname), # ("function_name", library)
Int, # return type from the C library
(Cvoid, Cvoid),
Nothing
)
# 如果正确的话,理想结果是
#julia> test()
#julia> Hello World!