#compilation #julia
Вопрос:
Я создаю приложение для отправки с Джулией, используя библиотеку PackageCompiler.jl.
https://github.com/JuliaLang/PackageCompiler.jl
Я последовал приведенному здесь примеру и заставил его работать так, как ожидалось:
https://github.com/JuliaLang/PackageCompiler.jl
Сейчас я пытаюсь по частям модифицировать код, чтобы заменить игрушечную функцию моей собственной функцией. Это включает в себя чтение CSV-файла во фрейм данных, путь к которому берется из командной строки. На данный момент я просто пытаюсь выполнить эту задачу.
У меня есть этот код в MyApp.jl
:
module MyApp
using Example
using HelloWorldC_jll
using Pkg.Artifacts
using DataFrames, CSV, Statistics
fooifier_path() = joinpath(artifact"fooifier", "bin", "fooifier" * (Sys.iswindows() ? ".exe" : ""))
function julia_main()
try
real_main()
catch
Base.invokelatest(Base.display_error, Base.catch_stack())
return 1
end
return 0
end
function real_main()
# @show ARGS
# @show Base.PROGRAM_FILE
# @show DEPOT_PATH
# @show LOAD_PATH
# @show pwd()
# @show Base.active_project()
# @show Threads.nthreads()
# @show Sys.BINDIR
# display(Base.loaded_modules)
for arg in ARGS
println(arg)
end
println("this part worked!")
df = CSV.read(string(ARGS[1]), DataFrame)[10:end-10,:];
println(df)
return
end
if abspath(PROGRAM_FILE) == @__FILE__
real_main()
end
Я компилирую код с помощью:
using PackageCompiler;
create_app("MyApp", "MyAppCompiled")
и он отлично компилируется.
Я запускаю его с:
julia MyAppCompiled/bin/MyApp <absolute path to csv>
и это работает вплоть до части фрейма данных, где я получаю эту ошибку:
it worked!
MyApp(66457,0x115997dc0) malloc: *** error for object 0x1117d9510: pointer being realloc'd was not allocated
MyApp(66457,0x115997dc0) malloc: *** set a breakpoint in malloc_error_break to debug
signal (6): Abort trap: 6
in expression starting at none:0
__pthread_kill at /usr/lib/system/libsystem_kernel.dylib (unknown line)
Allocations: 47484171 (Pool: 47468051; Big: 16120); GC: 49
Abort trap: 6
Кто-нибудь может помочь мне понять, что я делаю не так? Я знаю, что указываю правильный путь, потому что, если я неправильно введу путь, я получу сообщение » это неправильный файл…». Я пробовал звонить по относительному и абсолютному путям.
Комментарии:
1. Чтобы помочь с отладкой процесса, вы можете попробовать (а) пытается что-то проще и легче, чем
CSV.read
наDataFrame
… скажем простоreaddlm
(от DelimitedFiles stdlib) КArray
, и (B), возможно, не нарезая ДФ прямо после ее прочтения (например, в случае, если он пуст, и т. д.).