Mold Error Building 9.0.3 From Zip File

So, I am build KiCad 9.0.3 from the zip file. Why, just because…

Anyway, after resolving a number of dependency issues, I have managed to complete the build about 91% of the way. Then I get this error:

mold: error: undefined symbol: Kiface()

referenced by eda_base_frame.cpp
common/libcommon.a(eda_base_frame.cpp.o):(EDA_BASE_FRAME::config() const)
referenced by eda_base_frame.cpp
common/libcommon.a(eda_base_frame.cpp.o):(EDA_BASE_FRAME::sys_search())
referenced by eda_base_frame.cpp
common/libcommon.a(eda_base_frame.cpp.o):(EDA_BASE_FRAME::help_name())
referenced 2 more times
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.

Anybody know what might be going on here?

I just cloned the repository and attempted to build that and got the same error. So, at least it’s got nothing to do with the zip file.

By the way I am building on a Debian 12 system with gcc-12 and g++12. I built and installed a local copy of wxWidgets 3.2.2, which seems to be detected properly.

Here is my configuration command:

cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_CXX_FLAGS=“-fuse-ld=mold” -DCMAKE_INSTALL_PREFIX=$HOME/.local -DCMAKE_PREFIX_PATH=$HOME/.local -DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON -DKICAD_USE_EGL=ON …/…/

[2036/2236] Building CXX object utils/idftools/CMakeFiles/idf2vrml.dir/idf2vrml.cpp.o
[2037/2236] Linking CXX executable utils/idftools/idf2vrml
FAILED: utils/idftools/idf2vrml 
: && /usr/bin/c++ -fuse-ld=mold -Wno-attributes -Wno-ignored-attributes -pthread -Wall -Wsuggest-override -Wduplicated-branches -Wduplicated-cond -Werror=vla -Wimplicit-fallthrough=5 -Werror=return-type -Wshadow -Wsign-compare -Wmissing-field-initializers -Wempty-body -Wreorder -Wmismatched-tags -Wpessimizing-move -Wredundant-move -Wno-psabi -O2 -g -DNDEBUG  utils/idftools/CMakeFiles/idf2vrml.dir/idf2vrml.cpp.o -o utils/idftools/idf2vrml -L/home/fred/.local/lib -Wl,-rpath,/home/fred/.local/lib:/home/fred/Source/kicad/kicad/build/release/common/gal:/home/fred/Source/kicad/kicad/build/release/common:/home/fred/Source/kicad/kicad/build/release/api:  utils/idftools/libidf3.a  libs/kimath/libkimath.a  common/libcommon.a  /usr/lib/x86_64-linux-gnu/libOpenGL.so  /usr/lib/x86_64-linux-gnu/libGLX.so  /usr/lib/x86_64-linux-gnu/libGLU.so  -L/home/fred/.local/lib  -pthread  -lwx_gtk3u_gl-3.2  -lwx_gtk3u_aui-3.2  -lwx_gtk3u_html-3.2  -lwx_gtk3u_core-3.2  -lwx_baseu_net-3.2  -lwx_baseu-3.2  -lwx_gtk3u_propgrid-3.2  -lwx_baseu_xml-3.2  -lwx_gtk3u_stc-3.2  -lwx_gtk3u_richtext-3.2  scripting/libscripting.a  common/libcommon.a  scripting/libscripting.a  thirdparty/libcontext/liblibcontext.a  common/gal/libkigal.so.9.0.3  thirdparty/glew/libglew.a  /usr/lib/x86_64-linux-gnu/libEGL.so  /usr/lib/x86_64-linux-gnu/libcairo.so  /usr/lib/x86_64-linux-gnu/libpixman-1.so  /usr/lib/x86_64-linux-gnu/libOpenGL.so  /usr/lib/x86_64-linux-gnu/libGLX.so  /usr/lib/x86_64-linux-gnu/libGLU.so  thirdparty/nanosvg/libnanosvg.a  thirdparty/dxflib_qcad/libdxflib_qcad.a  thirdparty/tinyspline_lib/libtinyspline_lib.a  thirdparty/nanodbc/libnanodbc.a  -lodbc  /usr/lib/x86_64-linux-gnu/libboost_locale.so.1.74.0  /usr/lib/x86_64-linux-gnu/libboost_chrono.so.1.74.0  /usr/lib/x86_64-linux-gnu/libboost_system.so.1.74.0  /usr/lib/x86_64-linux-gnu/libboost_thread.so.1.74.0  /usr/lib/x86_64-linux-gnu/libboost_atomic.so.1.74.0  common/libkicommon.so.9.0.3  libs/kimath/libkimath.a  thirdparty/clipper2/libclipper2.a  -lm  libs/kiplatform/libkiplatform.a  libs/core/libcore.a  -L/home/fred/.local/lib  -pthread  -lgtk-3  -lgdk-3  -lz  -lpangocairo-1.0  -lpango-1.0  -lharfbuzz  -latk-1.0  -lcairo-gobject  -lcairo  -lgdk_pixbuf-2.0  -lgio-2.0  -lgobject-2.0  -lglib-2.0  -lsecret-1  -lgio-2.0  -lgobject-2.0  -lglib-2.0  -lsecret-1  /usr/lib/x86_64-linux-gnu/libwayland-client.so  thirdparty/fmt/libfmt.a  libs/kinng/libkinng.a  /usr/lib/x86_64-linux-gnu/libnng.so.1.5.2  api/libkiapi.so.9.0.3  /home/fred/.local/lib/libprotobuf.so.31.1.0  /home/fred/.local/lib/libabsl_log_internal_check_op.a  /home/fred/.local/lib/libabsl_die_if_null.a  /home/fred/.local/lib/libabsl_log_internal_conditions.a  /home/fred/.local/lib/libabsl_log_internal_message.a  /home/fred/.local/lib/libabsl_log_internal_nullguard.a  /home/fred/.local/lib/libabsl_examine_stack.a  /home/fred/.local/lib/libabsl_log_internal_format.a  /home/fred/.local/lib/libabsl_log_internal_structured_proto.a  /home/fred/.local/lib/libabsl_log_internal_log_sink_set.a  /home/fred/.local/lib/libabsl_log_sink.a  /home/fred/.local/lib/libabsl_log_entry.a  /home/fred/.local/lib/libabsl_log_internal_proto.a  /home/fred/.local/lib/libabsl_flags_internal.a  /home/fred/.local/lib/libabsl_flags_marshalling.a  /home/fred/.local/lib/libabsl_flags_reflection.a  /home/fred/.local/lib/libabsl_flags_config.a  /home/fred/.local/lib/libabsl_flags_program_name.a  /home/fred/.local/lib/libabsl_flags_private_handle_accessor.a  /home/fred/.local/lib/libabsl_flags_commandlineflag.a  /home/fred/.local/lib/libabsl_flags_commandlineflag_internal.a  /home/fred/.local/lib/libabsl_log_initialize.a  /home/fred/.local/lib/libabsl_log_internal_globals.a  /home/fred/.local/lib/libabsl_log_globals.a  /home/fred/.local/lib/libabsl_vlog_config_internal.a  /home/fred/.local/lib/libabsl_log_internal_fnmatch.a  /home/fred/.local/lib/libabsl_raw_hash_set.a  /home/fred/.local/lib/libabsl_hashtablez_sampler.a  /home/fred/.local/lib/libabsl_random_distributions.a  /home/fred/.local/lib/libabsl_random_seed_sequences.a  /home/fred/.local/lib/libabsl_random_internal_entropy_pool.a  /home/fred/.local/lib/libabsl_random_internal_randen.a  /home/fred/.local/lib/libabsl_random_internal_randen_hwaes.a  /home/fred/.local/lib/libabsl_random_internal_randen_hwaes_impl.a  /home/fred/.local/lib/libabsl_random_internal_randen_slow.a  /home/fred/.local/lib/libabsl_random_internal_platform.a  /home/fred/.local/lib/libabsl_random_internal_seed_material.a  /home/fred/.local/lib/libabsl_random_seed_gen_exception.a  /home/fred/.local/lib/libabsl_statusor.a  /home/fred/.local/lib/libabsl_status.a  /home/fred/.local/lib/libabsl_cord.a  /home/fred/.local/lib/libabsl_cordz_info.a  /home/fred/.local/lib/libabsl_cord_internal.a  /home/fred/.local/lib/libabsl_hash.a  /home/fred/.local/lib/libabsl_city.a  /home/fred/.local/lib/libabsl_cordz_functions.a  /home/fred/.local/lib/libabsl_exponential_biased.a  /home/fred/.local/lib/libabsl_cordz_handle.a  /home/fred/.local/lib/libabsl_crc_cord_state.a  /home/fred/.local/lib/libabsl_crc32c.a  /home/fred/.local/lib/libabsl_crc_internal.a  /home/fred/.local/lib/libabsl_crc_cpu_detect.a  /home/fred/.local/lib/libabsl_leak_check.a  /home/fred/.local/lib/libabsl_strerror.a  /home/fred/.local/lib/libabsl_str_format_internal.a  /home/fred/.local/lib/libabsl_synchronization.a  /home/fred/.local/lib/libabsl_stacktrace.a  /home/fred/.local/lib/libabsl_symbolize.a  /home/fred/.local/lib/libabsl_debugging_internal.a  /home/fred/.local/lib/libabsl_demangle_internal.a  /home/fred/.local/lib/libabsl_demangle_rust.a  /home/fred/.local/lib/libabsl_decode_rust_punycode.a  /home/fred/.local/lib/libabsl_utf8_for_code_point.a  /home/fred/.local/lib/libabsl_graphcycles_internal.a  /home/fred/.local/lib/libabsl_kernel_timeout_internal.a  /home/fred/.local/lib/libabsl_malloc_internal.a  /home/fred/.local/lib/libabsl_tracing_internal.a  /home/fred/.local/lib/libabsl_time.a  /home/fred/.local/lib/libabsl_civil_time.a  /home/fred/.local/lib/libabsl_time_zone.a  /home/fred/.local/lib/libabsl_strings.a  /home/fred/.local/lib/libabsl_int128.a  /home/fred/.local/lib/libabsl_strings_internal.a  /home/fred/.local/lib/libabsl_string_view.a  /home/fred/.local/lib/libabsl_base.a  /home/fred/.local/lib/libabsl_spinlock_wait.a  -lrt  /home/fred/.local/lib/libabsl_throw_delegate.a  /home/fred/.local/lib/libabsl_raw_logging_internal.a  /home/fred/.local/lib/libabsl_log_severity.a  thirdparty/json_schema_validator/libnlohmann_json_schema_validator.a  /usr/lib/x86_64-linux-gnu/libcurl.so  /usr/lib/x86_64-linux-gnu/libzstd.so  -lwx_gtk3u_gl-3.2  -lwx_gtk3u_aui-3.2  -lwx_gtk3u_html-3.2  -lwx_gtk3u_core-3.2  -lwx_baseu_net-3.2  -lwx_baseu-3.2  -lwx_gtk3u_propgrid-3.2  -lwx_baseu_xml-3.2  -lwx_gtk3u_stc-3.2  -lwx_gtk3u_richtext-3.2  /usr/lib/x86_64-linux-gnu/libgit2.so  /usr/lib/x86_64-linux-gnu/libfreetype.so  /usr/lib/x86_64-linux-gnu/libfontconfig.so  /usr/lib/x86_64-linux-gnu/libpython3.11.so  -Wl,-rpath-link,/home/fred/.local/lib && :
mold: error: undefined symbol: Kiface()
>>> referenced by eda_base_frame.cpp
>>>               common/libcommon.a(eda_base_frame.cpp.o):(EDA_BASE_FRAME::config() const)>>> referenced by eda_base_frame.cpp
>>>               common/libcommon.a(eda_base_frame.cpp.o):(EDA_BASE_FRAME::sys_search())>>> referenced by eda_base_frame.cpp
>>>               common/libcommon.a(eda_base_frame.cpp.o):(EDA_BASE_FRAME::help_name())>>> referenced 3 more times

collect2: error: ld returned 1 exit status
[2038/2236] Building CXX object kicad/pcm/CMakeFiles/pcm.dir/dialogs/panel_packages_view.cpp.o
[2039/2236] Building CXX object qa/qa_utils/CMakeFiles/qa_utils.dir/wx_utils/unit_test_utils.cpp.o
[2040/2236] Building CXX object qa/pcbnew_utils/CMakeFiles/qa_pcbnew_utils.dir/board_construction_utils.cpp.o
[2041/2236] Building CXX object kicad/pcm/CMakeFiles/pcm.dir/pcm_task_manager.cpp.o
[2042/2236] Building CXX object qa/qa_utils/CMakeFiles/qa_utils.dir/uuid_test_utils.cpp.o
[2043/2236] Building CXX object qa/pcbnew_utils/CMakeFiles/qa_pcbnew_utils.dir/board_file_utils.cpp.o
[2044/2236] Building CXX object kicad/pcm/CMakeFiles/pcm.dir/pcm.cpp.o
[2045/2236] Building CXX object qa/pcbnew_utils/CMakeFiles/qa_pcbnew_utils.dir/board_test_utils.cpp.o
[2046/2236] Building CXX object qa/schematic_utils/CMakeFiles/qa_schematic_utils.dir/eeschema_test_utils.cpp.o
ninja: build stopped: subcommand failed.

Try using a different linker.

You can use lld or try asking mold maintainer for help.

What is the standard linker the the KiCad devs use?

We use the default linker provided by the standard toolchain on the Linux distros we support. This is generally GNU ld.

Hmm, has any run time errors been connected to the use of lld or gold for that matter as the linker?

Don’t know. You are welcome to experiment with linkers, but if you run into issues, there probably won’t be much help available.

Well gee, it takes me an hour just to find out if the linker will get past this issue. lld seems to work. I suppose I should have just used ld at the start. So, what’s one more hour just to insure my build follows a well trodden path. I just want a KiCad that works. :slight_smile: