FS#56137 - [ncurses] libncurses does not contain references to necessary symbols

Attached to Project: Arch Linux
Opened by Kirill Bobyrev (omtcyfz) - Friday, 27 October 2017, 10:42 GMT
Last edited by Doug Newgard (Scimmia) - Friday, 27 October 2017, 13:30 GMT
Task Type Bug Report
Category Packages: Core
Status Closed
Assigned To No-one
Architecture x86_64
Severity Critical
Priority Normal
Reported Version
Due in Version Undecided
Due Date Undecided
Percent Complete 100%
Votes 0
Private No

Details

Description: while trying to link any program I use to ncurses via `-lcurses` or `-lncurses` I keep getting weird linker errors since the last update to the current Core ncurses package.

Additional info:
* Version : 6.0+20170902-2

Steps to reproduce: Basically, try linking any program to ncurses. I'm having issues building LLVM from scratch, building my projects relying on anything that uses ncurses (e.g. LLVM itself) and compiling any fairly simple pieces of code.

An example is as follows:

```
[omtcyfz@omtcyfz-arch playground]$ cat program.cpp
#include <ncurses.h>

int main() {
initscr(); /* Start curses mode */
printw("Hello World !!!"); /* Print Hello World */
refresh(); /* Print it on to the real screen */
getch(); /* Wait for user input */
endwin(); /* End curses mode */
return 0;
}
[omtcyfz@omtcyfz-arch playground]$ g++ -lncurses program.cpp
/usr/bin/ld: /usr/lib/gcc/x86_64-pc-linux-gnu/7.2.0/../../../../lib/libncursesw.so: undefined reference to symbol 'stdscr'
/usr/lib/libtinfo.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
```

Or more verbose output with Clang:

```
[omtcyfz@omtcyfz-arch playground]$ clang++ -v -lcurses program.cpp
clang version 5.0.0 (tags/RELEASE_500/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-pc-linux-gnu/6.4.1
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-pc-linux-gnu/7.2.0
Found candidate GCC installation: /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/6.4.1
Found candidate GCC installation: /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.2.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-pc-linux-gnu/6.4.1
Found candidate GCC installation: /usr/lib/gcc/x86_64-pc-linux-gnu/7.2.0
Found candidate GCC installation: /usr/lib64/gcc/x86_64-pc-linux-gnu/6.4.1
Found candidate GCC installation: /usr/lib64/gcc/x86_64-pc-linux-gnu/7.2.0
Selected GCC installation: /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.2.0
Candidate multilib: .;@m64
Selected multilib: .;@m64
"/usr/bin/clang-5.0" -cc1 -triple x86_64-unknown-linux-gnu -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -discard-value-names -main-file-name program.cpp -mrelocation-model pic -pic-level 2 -pic-is-pie -mthread-model posix -mdisable-fp-elim -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu x86-64 -v -dwarf-column-info -debugger-tuning=gdb -resource-dir /usr/lib/clang/5.0.0 -internal-isystem /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.2.0/../../../../include/c++/7.2.0 -internal-isystem /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.2.0/../../../../include/c++/7.2.0/x86_64-pc-linux-gnu -internal-isystem /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.2.0/../../../../include/c++/7.2.0/backward -internal-isystem /usr/local/include -internal-isystem /usr/lib/clang/5.0.0/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdeprecated-macro -fdebug-compilation-dir /home/omtcyfz/dev/playground -ferror-limit 19 -fmessage-length 167 -stack-protector 2 -fobjc-runtime=gcc -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -o /tmp/program-4777ff.o -x c++ program.cpp
clang -cc1 version 5.0.0 based upon LLVM 5.0.0 default target x86_64-unknown-linux-gnu
ignoring nonexistent directory "/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.2.0/../../../../include/c++/7.2.0
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.2.0/../../../../include/c++/7.2.0/x86_64-pc-linux-gnu
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.2.0/../../../../include/c++/7.2.0/backward
/usr/local/include
/usr/lib/clang/5.0.0/include
/usr/include
End of search list.
"/usr/bin/ld" -pie --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o a.out /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.2.0/../../../../lib64/Scrt1.o /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.2.0/../../../../lib64/crti.o /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.2.0/crtbeginS.o -L/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.2.0 -L/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.2.0/../../../../lib64 -L/usr/bin/../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.2.0/../../.. -L/usr/bin/../lib -L/lib -L/usr/lib -lcurses /tmp/program-4777ff.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.2.0/crtendS.o /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.2.0/../../../../lib64/crtn.o
/usr/bin/ld: /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.2.0/../../../../lib64/libncursesw.so: undefined reference to symbol 'stdscr'
/usr/lib/libtinfo.so.6: error adding symbols: DSO missing from command line
clang-5.0: error: linker command failed with exit code 1 (use -v to see invocation)
```
This task depends upon

Closed by  Doug Newgard (Scimmia)
Friday, 27 October 2017, 13:30 GMT
Reason for closing:  Duplicate
Additional comments about closing:   FS#56000 
Comment by Chih-Hsuan Yen (yan12125) - Friday, 27 October 2017, 10:47 GMT
Most likely you'll need -ltinfo as well. Arch's ncurses is split into libncurses+libtino+libtic since 6.0+20170902-2.
Comment by Chih-Hsuan Yen (yan12125) - Friday, 27 October 2017, 10:53 GMT
Oh, this is fixed in testing/ncurses 6.0+20170902-3
Comment by Kirill Bobyrev (omtcyfz) - Friday, 27 October 2017, 11:04 GMT
> Most likely you'll need -ltinfo as well. Arch's ncurses is split into libncurses+libtino+libtic since 6.0+20170902-2.

Sounds legit, thanks. Though, I am experiencing the same issue in any CMake-generated scripts. I assume FindCurses.cmake also tries to link with `-lcurses` only, which I see why looking through `ninja -v`. I should maybe file a bug to CMake, too, then. Thanks anyway!

Loading...