JuliaLang / JuliaLang/PackageCompiler.jl
Artifact error for compiled binaries with chinese characters in path
- Dominant language
- Julia
- Stars
- 1.6k
- Forks
- 205
- Avg merge
- 18h 37m
- Merged PRs (30d)
- 7
Description
Only test on windows11 with julia-1.7.1.
A MWE:
1. make a package (called SelfTest) with PackageTemplate.jl
2. add HDF5 as a dependency
3. create the main function
```
function julia_main()::Cint
println("wow")
return 0
end
```
4. create a precompile file
```
using SelfTest
SelfTest.julia_main()
```
5. run `create_app(".", "bin/test_hdf5"; precompile_execution_file=["test/precompile/run_systems.jl"], force=true, include_lazy_artifacts=true)`
6. check it works fine
```
PS D:\selftest> .\bin\test_hdf5\bin\SelfTest.exe
wow
```
7. mkdir `中文test` in `bin` and move `test_hdf5` into it
8. check it fails
```
PS D:\selftest> .\bin\中文test\test_hdf5\bin\SelfTest.exe
fatal: error thrown and no exception handler available.
InitError(mod=:OpenSSL_jll, error=ErrorException("Artifact "OpenSSL" was not installed correctly. Try `using Pkg; Pkg.instantiate()` to re-install all missing resources."))
unknown function (ip: 000000000ecd85c2)
unknown function (ip: 000000000edecd64)
unknown function (ip: 000000000ea24f23)
jl_f__call_latest at D:\selftest\bin\中文test\test_hdf5\bin\libjulia-internal.d (unknown line)
jl_f__setsuper at D:\selftest\bin\中文test\test_hdf5\bin\libjulia-internal.d (unknown line)
unknown function (ip: 000000000ea2317d)
jl_f__setsuper at D:\selftest\bin\中文test\test_hdf5\bin\libjulia-internal.d (unknown line)
unknown function (ip: 000000000ea23263)
jl_clear_implicit_imports at D:\selftest\bin\中文test\test_hdf5\bin\libjulia-internal.d (unknown line)
jl_clear_implicit_imports at D:\selftest\bin\中文test\test_hdf5\bin\libjulia-internal.d (unknown line)
jl_clear_implicit_imports at D:\selftest\bin\中文test\test_hdf5\bin\libjulia-internal.d (unknown line)
jl_fptr_interpret_call at D:\selftest\bin\中文test\test_hdf5\bin\libjulia-internal.d (unknown line)
macro expansion at C:\Users\DELL\AppData\Local\Programs\Julia-1.7.1\share\julia\stdlib\v1.7\Artifacts\src\Artifacts.jl:680 [inlined]
find_artifact_dir at C:\Users\DELL\.julia\packages\JLLWrappers\QpMQW\src\wrapper_generators.jl:17
unknown function (ip: 000000000edb0676)
jl_module_run_initializer at D:\selftest\bin\中文test\test_hdf5\bin\libjulia-internal.d (unknown line)
jl_get_libllvm at D:\selftest\bin\中文test\test_hdf5\bin\libjulia-internal.d (unknown line)
jl_init at D:\selftest\bin\中文test\test_hdf5\bin\libjulia-internal.d (unknown line)
main at D:\selftest\bin\中文test\test_hdf5\bin\SelfTest.e (unknown line)
unknown function (ip: 00000000004013c6)
unknown function (ip: 00000000004014fa)
BaseThreadInitThunk at C:\WINDOWS\System32\KERNEL32.DLL (unknown line)
RtlUserThreadStart at C:\WINDOWS\SYSTEM32\ntdll.dll (unknown line)
```
9. mkdir `eng_test` in `bin` and move `test_hdf5` into it
10. check it works fine
```
PS D:\selftest> .\bin\eng_test\test_hdf5\bin\SelfTest.exe
wow
```
11. test directly compiled into Chinese directory `create_app(".", "bin/中文"; precompile_execution_file=["test/precompile/run_systems.jl"], force=true, include_lazy_artifacts=true)`
12. check it fails
```
PS D:\selftest> .\bin\中文\bin\SelfTest.exe
fatal: error thrown and no exception handler available.
InitError(mod=:OpenSSL_jll, error=ErrorException("Artifact "OpenSSL" was not installed correctly. Try `using Pkg; Pkg.instantiate()` to re-install all missing resources."))
unknown function (ip: 00000000101c9e62)
unknown function (ip: 000000001025a4b4)
unknown function (ip: 000000000fe92563)
jl_f__call_latest at D:\selftest\bin\中文\bin\libjulia-internal.d (unknown line)
jl_f__setsuper at D:\selftest\bin\中文\bin\libjulia-internal.d (unknown line)
unknown function (ip: 000000000fe8f10d)
jl_f__setsuper at D:\selftest\bin\中文\bin\libjulia-internal.d (unknown line)
unknown function (ip: 000000000fe8f2c3)
jl_clear_implicit_imports at D:\selftest\bin\中文\bin\libjulia-internal.d (unknown line)
jl_clear_implicit_imports at D:\selftest\bin\中文\bin\libjulia-internal.d (unknown line)
jl_clear_implicit_imports at D:\selftest\bin\中文\bin\libjulia-internal.d (unknown line)
jl_fptr_interpret_call at D:\selftest\bin\中文\bin\libjulia-internal.d (unknown line)
macro expansion at C:\Users\DELL\AppData\Local\Programs\Julia-1.7.1\share\julia\stdlib\v1.7\Artifacts\src\Artifacts.jl:680 [inlined]
find_artifact_dir at C:\Users\DELL\.julia\packages\JLLWrappers\QpMQW\src\wrapper_generators.jl:17
unknown function (ip: 000000001021b486)
jl_module_run_initializer at D:\selftest\bin\中文\bin\libjulia-internal.d (unknown line)
jl_get_libllvm at D:\selftest\bin\中文\bin\libjulia-internal.d (unknown line)
jl_init at D:\selftest\bin\中文\bin\libjulia-internal.d (unknown line)
main at D:\selftest\bin\中文\bin\SelfTest.e (unknown line)
unknown function (ip: 00000000004013c6)
unknown function (ip: 00000000004014fa)
BaseThreadInitThunk at C:\WINDOWS\System32\KERNEL32.DLL (unknown line)
RtlUserThreadStart at C:\WINDOWS\SYSTEM32\ntdll.dll (unknown line)
```
13. rename it to `eng` and move to `eng_test`
14. check it works fine
```
PS D:\selftest> .\bin\eng_test\eng\bin\SelfTest.exe
wow
```
It seems that it is a bug with chinese characters in the path of executables.
Contributor guide
No contributing guide indexed for this repository
Research direction
Reproduce the failure with create_app using test/precompile/run_systems.jl, then run the generated SelfTest.exe from paths containing Chinese characters and from ASCII-only paths. Start with the artifact lookup shown in Artifacts/src/Artifacts.jl and JLLWrappers/src/wrapper_generators.jl. Done means the compiled executable initializes its artifacts successfully from both path types on Windows.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- julia
- Domain
- build-system, operating-systems
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100