Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Build issue with clang on MSYS #2937

Open
jcelerier opened this issue Nov 19, 2024 · 0 comments
Open

Build issue with clang on MSYS #2937

jcelerier opened this issue Nov 19, 2024 · 0 comments

Comments

@jcelerier
Copy link

jcelerier commented Nov 19, 2024

Describe the bug
When building on ubuntu with clang-18:

ld.lld: error: undefined symbol: Catch::ReusableStringStream::str() const

ld.lld: error: undefined symbol: Catch::formatReconstructedExpression(std::__1::basic_ostream<char, std::__1::char_traits<char>>&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, Catch::StringRef, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&)

ld.lld: error: undefined symbol: Catch::StringMaker<double, void>::convert(double)

CI failure: https://github.com/celtera/avendish/actions/runs/11863814439/job/33065997014?pr=42
Here are my complete build flags - I can see that Catch2 is correctly linked:

[ 97%] Building CXX object CMakeFiles/test_gain.dir/tests/objects/gain.cpp.o
/usr/bin/clang++-18 -DDEVELOPMENT -DFMT_HEADER_ONLY=1 -I/home/runner/work/avendish/avendish/build-debug -I/home/runner/work/avendish/avendish -I/home/runner/work/avendish/avendish/build-debug/_deps/qlibs_reflect-src -I/home/runner/work/avendish/avendish/score/3rdparty/vst3 -I/home/runner/work/avendish/avendish/include -I/home/runner/work/avendish/avendish/build-debug/_deps/fmt-src/include -I/home/runner/work/avendish/avendish/build-debug/_deps/magic_enum-src/include -I/home/runner/work/avendish/avendish/build-debug/_deps/catch2-src/src/catch2/.. -I/home/runner/work/avendish/avendish/build-debug/_deps/catch2-build/generated-includes -isystem /opt/ossia-sdk/boost/include -Wno-non-virtual-dtor -g -std=gnu++23 -fPIE -fvisibility=internal -fvisibility-inlines-hidden -fno-semantic-interposition -fPIC -stdlib=libc++ -fno-stack-protector -fno-ident -fno-plt -ffunction-sections -fdata-sections -MD -MT CMakeFiles/test_gain.dir/tests/objects/gain.cpp.o -MF CMakeFiles/test_gain.dir/tests/objects/gain.cpp.o.d -o CMakeFiles/test_gain.dir/tests/objects/gain.cpp.o -c /home/runner/work/avendish/avendish/tests/objects/gain.cpp
[ 97%] Linking CXX executable test_gain
/usr/local/bin/cmake -E cmake_link_script CMakeFiles/test_gain.dir/link.txt --verbose=1
ld.lld: error: undefined symbol: Catch::ReusableStringStream::str() const
>>> referenced by gain.cpp:7 (/home/runner/work/avendish/avendish/tests/objects/gain.cpp:7)
>>>               CMakeFiles/test_gain.dir/tests/objects/gain.cpp.o:(CATCH2_INTERNAL_TEST_0())
>>> referenced by gain.cpp:11 (/home/runner/work/avendish/avendish/tests/objects/gain.cpp:11)
>>>               CMakeFiles/test_gain.dir/tests/objects/gain.cpp.o:(CATCH2_INTERNAL_TEST_0())

ld.lld: error: undefined symbol: Catch::formatReconstructedExpression(std::__1::basic_ostream<char, std::__1::char_traits<char>>&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, Catch::StringRef, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&)
>>> referenced by catch_decomposer.hpp:79 (_deps/catch2-src/src/catch2/../catch2/internal/catch_decomposer.hpp:79)
>>>               CMakeFiles/test_gain.dir/tests/objects/gain.cpp.o:(Catch::BinaryExpr<double, double>::streamReconstructedExpression(std::__1::basic_ostream<char, std::__1::char_traits<char>>&) const)

ld.lld: error: undefined symbol: Catch::StringMaker<double, void>::convert(double)
>>> referenced by catch_tostring.hpp:150 (_deps/catch2-src/src/catch2/../catch2/catch_tostring.hpp:150)
>>>               CMakeFiles/test_gain.dir/tests/objects/gain.cpp.o:(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> Catch::Detail::stringify<double>(double const&))
clang++-18: error: linker command failed with exit code 1 (use -v to see invocation)
/usr/bin/clang++-18  -Wno-non-virtual-dtor -g -fuse-ld=lld -Xlinker --dependency-file -Xlinker CMakeFiles/test_gain.dir/link.d CMakeFiles/test_gain.dir/tests/objects/gain.cpp.o -o test_gain  _deps/fmt-build/libfmtd.a -Wl,--gc-sections -lc++ -Bsymbolic _deps/catch2-build/src/libCatch2Maind.a _deps/catch2-build/src/libCatch2d.a
gmake[2]: *** [CMakeFiles/test_gain.dir/build.make:104: test_gain] Error 1

And the very minimal test file causing the failure: https://github.com/celtera/avendish/blob/feature/catch2/tests/objects/gain.cpp

It works fine with gcc on the same platform.

Expected behavior
Build succeeds

Platform information:

  • OS: Ubuntu 24.04 as provided by GH actions
  • Compiler+version: Clang 18 as provided by apt.llvm.org
  • Catch version: current HEAD
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant