利用ccall函数实现C语言的成功调用,欢迎指点

以下代码是一个简单的实现过程,问题出现在最后的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!
1 个赞

ccall的问题应该是函数的输入类型不匹配,原函数没有输入参数

test() = ccall(
    (:main, clibname),  # ("function_name", library)
    Int,                # return type from the C library
    ()
)

不过你那个编译语句我没复现成功,我是单独编译的