[Bug 293859] C11's call_once requires nonstandard library -lstdthreads for linking
[email protected] Mon, 16 Mar 2026 21:31:55 +0000
| Newsgroups | gmane.os.freebsd.devel.standards |
|---|---|
| Message-ID | <[email protected]/bugzilla/> |
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=293859 --- Comment #5 from Matthias Andree <[email protected]> --- Detail: the relevant calls are in .c files that, depending on compiler settings, will either be #included directly from src/test/OpenEXRCoreTest/compressionTables.cpp (or could possibly stand alone as external objects) -- this hinges on OPENEXR_ENABLE_API_VISIBILITY which gets #defined to be empty by default. ll.45 ff of src/test/OpenEXRCoreTest/compressionTables.cpp: #if defined(OPENEXR_ENABLE_API_VISIBILITY) #include "../../lib/OpenEXRCore/internal_b44_table.c" #include "../../lib/OpenEXRCore/internal_b44_table_init.c" #include "../../lib/OpenEXRCore/internal_dwa_table.c" #include "../../lib/OpenEXRCore/internal_dwa_table_init.c" #else ... src/lib/OpenEXRCore/internal_dwa_table_init.c 107: call_once (&dwa_tables_once, init_dwa_tables); src/lib/OpenEXRCore/internal_b44_table_init.c 56: call_once (&b44_tables_once, init_b44_tables); so those cannot use std::call_once (C++11) but need to use the C11 call_once. These are the two relevant compiler/linker calls that cause the issue, to give some more context: [mandree@freeryzen ~/VCS-other/openexr.git]$ ninja -C _build/ -v ninja: Entering directory `_build/' [1/2] /usr/bin/c++ -DCOMP_EXTRA=\"\" -DCOMP_MAJ=3 -DCOMP_MIN=4 -DCOMP_PATCH=7 -DILM_IMF_TEST_IMAGEDIR=\"/home/mandree/VCS-other/openexr.git/src/test/OpenEXRCoreTest/../OpenEXRTest/\" -I/home/mandree/VCS-other/openexr.git/_build/src/test/OpenEXRCoreTest -I/home/mandree/VCS-other/openexr.git/src/test/OpenEXRCoreTest -I/home/mandree/VCS-other/openexr.git/src/lib/OpenEXRCore -I/home/mandree/VCS-other/openexr.git/_build/cmake -I/home/mandree/VCS-other/openexr.git/src/lib/OpenEXR -I/home/mandree/VCS-other/openexr.git/src/lib/Iex -I/home/mandree/VCS-other/openexr.git/src/lib/IlmThread -isystem /usr/local/include -isystem /usr/local/include/Imath -O3 -DNDEBUG -std=c++17 -pthread -MD -MT src/test/OpenEXRCoreTest/CMakeFiles/OpenEXRCoreTest.dir/compressionTables.cpp.o -MF src/test/OpenEXRCoreTest/CMakeFiles/OpenEXRCoreTest.dir/compressionTables.cpp.o.d -o src/test/OpenEXRCoreTest/CMakeFiles/OpenEXRCoreTest.dir/compressionTables.cpp.o -c /home/mandree/VCS-other/openexr.git/src/test/OpenEXRCoreTest/compressionTables.cpp [2/2] : && /usr/bin/c++ -O3 -DNDEBUG -Xlinker --dependency-file=src/test/OpenEXRCoreTest/CMakeFiles/OpenEXRCoreTest.dir/link.d src/test/OpenEXRCoreTest/CMakeFiles/OpenEXRCoreTest.dir/base_units.cpp.o src/test/OpenEXRCoreTest/CMakeFiles/OpenEXRCoreTest.dir/buffer.cpp.o src/test/OpenEXRCoreTest/CMakeFiles/OpenEXRCoreTest.dir/compression.cpp.o src/test/OpenEXRCoreTest/CMakeFiles/OpenEXRCoreTest.dir/compressionTables.cpp.o src/test/OpenEXRCoreTest/CMakeFiles/OpenEXRCoreTest.dir/deep.cpp.o src/test/OpenEXRCoreTest/CMakeFiles/OpenEXRCoreTest.dir/general_attr.cpp.o src/test/OpenEXRCoreTest/CMakeFiles/OpenEXRCoreTest.dir/main.cpp.o src/test/OpenEXRCoreTest/CMakeFiles/OpenEXRCoreTest.dir/read.cpp.o src/test/OpenEXRCoreTest/CMakeFiles/OpenEXRCoreTest.dir/write.cpp.o -o bin/OpenEXRCoreTest -Wl,-rpath,/home/mandree/VCS-other/openexr.git/_build/src/lib/OpenEXR:/home/mandree/VCS-other/openexr.git/_build/src/lib/OpenEXRCore:/home/mandree/VCS-other/openexr.git/_build/src/lib/IlmThread:/home/mandree/VCS-other/openexr.git/_build/src/lib/Iex:/usr/local/lib src/lib/OpenEXR/libOpenEXR-3_4.so.33.3.4.7 src/lib/OpenEXRCore/libOpenEXRCore-3_4.so.33.3.4.7 /usr/local/lib/libImath-3_2.so.30.3.2.2 -lm src/lib/IlmThread/libIlmThread-3_4.so.33.3.4.7 src/lib/Iex/libIex-3_4.so.33.3.4.7 -pthread -Wl,-rpath-link,/usr/local/lib && : FAILED: [code=1] bin/OpenEXRCoreTest : && /usr/bin/c++ -O3 -DNDEBUG -Xlinker --dependency-file=src/test/OpenEXRCoreTest/CMakeFiles/OpenEXRCoreTest.dir/link.d src/test/OpenEXRCoreTest/CMakeFiles/OpenEXRCoreTest.dir/base_units.cpp.o src/test/OpenEXRCoreTest/CMakeFiles/OpenEXRCoreTest.dir/buffer.cpp.o src/test/OpenEXRCoreTest/CMakeFiles/OpenEXRCoreTest.dir/compression.cpp.o src/test/OpenEXRCoreTest/CMakeFiles/OpenEXRCoreTest.dir/compressionTables.cpp.o src/test/OpenEXRCoreTest/CMakeFiles/OpenEXRCoreTest.dir/deep.cpp.o src/test/OpenEXRCoreTest/CMakeFiles/OpenEXRCoreTest.dir/general_attr.cpp.o src/test/OpenEXRCoreTest/CMakeFiles/OpenEXRCoreTest.dir/main.cpp.o src/test/OpenEXRCoreTest/CMakeFiles/OpenEXRCoreTest.dir/read.cpp.o src/test/OpenEXRCoreTest/CMakeFiles/OpenEXRCoreTest.dir/write.cpp.o -o bin/OpenEXRCoreTest -Wl,-rpath,/home/mandree/VCS-other/openexr.git/_build/src/lib/OpenEXR:/home/mandree/VCS-other/openexr.git/_build/src/lib/OpenEXRCore:/home/mandree/VCS-other/openexr.git/_build/src/lib/IlmThread:/home/mandree/VCS-other/openexr.git/_build/src/lib/Iex:/usr/local/lib src/lib/OpenEXR/libOpenEXR-3_4.so.33.3.4.7 src/lib/OpenEXRCore/libOpenEXRCore-3_4.so.33.3.4.7 /usr/local/lib/libImath-3_2.so.30.3.2.2 -lm src/lib/IlmThread/libIlmThread-3_4.so.33.3.4.7 src/lib/Iex/libIex-3_4.so.33.3.4.7 -pthread -Wl,-rpath-link,/usr/local/lib && : ld: error: undefined symbol: call_once >>> referenced by compressionTables.cpp >>> src/test/OpenEXRCoreTest/CMakeFiles/OpenEXRCoreTest.dir/compressionTables.cpp.o:(exrcore_ensure_b44_tables()) >>> referenced by compressionTables.cpp >>> src/test/OpenEXRCoreTest/CMakeFiles/OpenEXRCoreTest.dir/compressionTables.cpp.o:(exrcore_ensure_dwa_tables()) >>> referenced by compressionTables.cpp >>> src/test/OpenEXRCoreTest/CMakeFiles/OpenEXRCoreTest.dir/compressionTables.cpp.o:(testDWATable(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&)) >>> referenced 2 more times c++: error: linker command failed with exit code 1 (use -v to see invocation) ninja: build stopped: subcommand failed. -- You are receiving this mail because: You are the assignee for the bug.