Kotlin/Native lld-link: error: undefined symbol: std::__throw_bad_array_new_length()
2024-02-21 21:02:57 #Kotlin 0. 问题
在 GitHub Workflow 或者 本地运行 Kotlin/Native 的 link 任务报错:
本地 & GitHub 环境:
1 2
| os = Windows compiler = GCC 11.2.0
|
以下为在 GitHub Workflow 上的日志片段
1 2 3 4 5 6 7 8 9 10 11 12 13
| e: C:\Users\runneradmin\.konan\dependencies\llvm-11.1.0-windows-x64-essentials/bin/clang++ invocation reported errors
The C:\Users\runneradmin\.konan\dependencies\llvm-11.1.0-windows-x64-essentials/bin/clang++ command returned non-zero exit code: 1. output: lld-link: error: undefined symbol: std::__throw_bad_array_new_length() >>> referenced by <Linked Lib name>.a(ThreadController.cpp.obj):(LibLoader::sendPluginException(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)) >>> referenced by <Linked Lib name>.a(ThreadController.cpp.obj):(LibLoader::ThreadController::submitJob(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::function<void ()>)) >>> referenced by <Linked Lib name>.a(ThreadController.cpp.obj):(LibLoader::ThreadController::callThreadEnd(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::function<void ()>)) >>> referenced 16 more times clang++: error: linker command failed with exit code 1 (use -v to see invocation)
> Task :<Proj name>:linkDebugExecutableNative FAILED :<Proj name>:linkDebugExecutableNative (Thread[Execution worker for ':',5,main]) completed. Took 3 mins 10.585 secs.
|
1. 原因
造成的原因是 Kotlin/Native 是用 GCC 9.2.0 的(见 KT-51975), 但是我在 Kotlin/Native 里的 cintrop 里 link 了一个用 GCC 11.2.0 编译的静态库.
2. 解决方法
用 GCC 10 / 9 重新编译要 link 的静态库或者改用动态库