vte::terminal::Tabstops::npos is not defined
Using clang to compile vte fails with undefined references unless -O2
or higher is used.
[67/87] Linking target src/test-tabstops.
FAILED: src/test-tabstops
clang++ -B/home/lantw44/.local/bin -o src/test-tabstops 'src/25a6634@@test-tabstops@exe/tabstops-test.cc.o' -L/home/lantw44/gnome/devinstall/lib -L/usr/local/lib -Wl,--no-undefined -Wl,--as-needed -Wl,-Bsymbolic-functions -march=corei7 -B/home/lantw44/.local/bin -pipe -g3 -Og -gz -fdebug-macro -B/home/lantw44/.local/bin -Wl,--compress-debug-sections=zlib -Wl,--start-group /home/lantw44/gnome/devinstall/lib/libglib-2.0.so -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,--end-group
ld: error: undefined symbol: vte::terminal::Tabstops::npos
>>> referenced by tabstops-test.cc:181 (../../source/vte/src/tabstops-test.cc:181)
>>> src/25a6634@@test-tabstops@exe/tabstops-test.cc.o:(test_tabstops_previous())
ld: error: undefined symbol: vte::terminal::Tabstops::npos
>>> referenced by tabstops-test.cc:181 (../../source/vte/src/tabstops-test.cc:181)
>>> src/25a6634@@test-tabstops@exe/tabstops-test.cc.o:(test_tabstops_previous())
ld: error: undefined symbol: vte::terminal::Tabstops::npos
>>> referenced by tabstops-test.cc:185 (../../source/vte/src/tabstops-test.cc:185)
>>> src/25a6634@@test-tabstops@exe/tabstops-test.cc.o:(test_tabstops_previous())
ld: error: undefined symbol: vte::terminal::Tabstops::npos
>>> referenced by tabstops-test.cc:186 (../../source/vte/src/tabstops-test.cc:186)
>>> src/25a6634@@test-tabstops@exe/tabstops-test.cc.o:(test_tabstops_previous())
ld: error: undefined symbol: vte::terminal::Tabstops::npos
>>> referenced by tabstops-test.cc:202 (../../source/vte/src/tabstops-test.cc:202)
>>> src/25a6634@@test-tabstops@exe/tabstops-test.cc.o:(test_tabstops_next())
ld: error: undefined symbol: vte::terminal::Tabstops::npos
>>> referenced by tabstops-test.cc:203 (../../source/vte/src/tabstops-test.cc:203)
>>> src/25a6634@@test-tabstops@exe/tabstops-test.cc.o:(test_tabstops_next())
ld: error: undefined symbol: vte::terminal::Tabstops::npos
>>> referenced by tabstops-test.cc:207 (../../source/vte/src/tabstops-test.cc:207)
>>> src/25a6634@@test-tabstops@exe/tabstops-test.cc.o:(test_tabstops_next())
ld: error: undefined symbol: vte::terminal::Tabstops::npos
>>> referenced by tabstops-test.cc:208 (../../source/vte/src/tabstops-test.cc:208)
>>> src/25a6634@@test-tabstops@exe/tabstops-test.cc.o:(test_tabstops_next())
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
The reason is that static position_t const npos = position_t(signed_position_t(-1));
in src/tabstops.hh
is just a declaration, and there is no file providing a definition. It can be fixed by replacing const
with constexpr
.
There are other files using const
in the same way. Probably they should be changed as well.