Guten Mittag,
ich versuch mich grad an den ersten Schritte in C++ mit NCurses. Als Buildsystem kommt CMake zum Einsatz.
Jetzt hab ich diesen Link hier probiert: http://answers.ros.org/question/69022/how-to-link-to-ncurses-library-in-the-make-file/
Oder der Teil meiner CMakeLists.txt
Lass ich dann cmake durchlaufen, sieht das so aus:
Ist also noch alles in Butter.
make scheitert dann aber beim Linken:
Er findet ncurses++w nicht.
Jetzt hab ich einfach mal die '++' aus der CMakeLists.txt rausgenommen, d.h.
cmake
make
Warum?
Also was ist jetzt bei ncurses++ anders als bei ncurses, obwohl das offenbar im gleichen Paket
mitgeliefert wird.
locate meint:
Also was ist jetzt an ncurses++ anders? Brauch ich das für mein C++-Programm? Im Paketmanager hab ich keine gesonderte ncurses++ gefunden. Ich bin auf dem Gebiet noch irgendwie ziemlich leer im Kopf.
ich versuch mich grad an den ersten Schritte in C++ mit NCurses. Als Buildsystem kommt CMake zum Einsatz.
Jetzt hab ich diesen Link hier probiert: http://answers.ros.org/question/69022/how-to-link-to-ncurses-library-in-the-make-file/
Oder der Teil meiner CMakeLists.txt
Code:
find_package (PkgConfig REQUIRED)
pkg_check_modules ( ncurses++ REQUIRED ncurses++ )
...
target_link_libraries(${PROJECT_NAME} ${ncurses++_LIBRARIES})
Lass ich dann cmake durchlaufen, sieht das so aus:
Code:
cmake ..
-- The C compiler identification is GNU 4.9.1
-- The CXX compiler identification is GNU 4.9.1
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
Musicopy Version: 0.1
CMAKE_SOURCE_DIR: /home/sm/Programmierung/Musicopy
CMAKE_BINARY_DIR: /home/sm/Programmierung/Musicopy/build
EXECUTABLE_OUTPUT_PATH: /home/sm/Programmierung/Musicopy/bin
LIBRARY_OUTPUT_PATH: /home/sm/Programmierung/Musicopy/bin
[COLOR="#00FF00"]-- Found PkgConfig: /usr/bin/pkg-config (found version "0.28")
-- checking for module 'ncurses++'
-- found ncurses++, version 5.9.20110404[/COLOR]
PROJECT_SOURCE_DIR: /home/sm/Programmierung/Musicopy/src
PROJECT_INCLUDE_DIR: /home/sm/Programmierung/Musicopy/include
-- Configuring done
-- Generating done
-- Build files have been written to: /home/sm/Programmierung/Musicopy/build
make scheitert dann aber beim Linken:
Code:
make
Scanning dependencies of target Musicopy
[ 33%] Building CXX object CMakeFiles/Musicopy.dir/src/main.cpp.o
[ 66%] Building CXX object CMakeFiles/Musicopy.dir/src/dir_reader.cpp.o
[100%] Building CXX object CMakeFiles/Musicopy.dir/src/config_handler.cpp.o
Linking CXX executable ../bin/Musicopy
[COLOR="#FF0000"]/usr/bin/ld: cannot find -lncurses++w[/COLOR]
collect2: Fehler: ld gab 1 als Ende-Status zurück
CMakeFiles/Musicopy.dir/build.make:135: recipe for target '../bin/Musicopy' failed
make[2]: *** [../bin/Musicopy] Error 1
CMakeFiles/Makefile2:60: recipe for target 'CMakeFiles/Musicopy.dir/all' failed
make[1]: *** [CMakeFiles/Musicopy.dir/all] Error 2
Makefile:76: recipe for target 'all' failed
make: *** [all] Error 2
Jetzt hab ich einfach mal die '++' aus der CMakeLists.txt rausgenommen, d.h.
Code:
find_package (PkgConfig REQUIRED)
pkg_check_modules ( ncurses++ REQUIRED ncurses++ )
...
target_link_libraries(${PROJECT_NAME} ${ncurses++_LIBRARIES})
cmake
Code:
Musicopy Version: 0.1
CMAKE_SOURCE_DIR: /home/sm/Programmierung/Musicopy
CMAKE_BINARY_DIR: /home/sm/Programmierung/Musicopy/build
EXECUTABLE_OUTPUT_PATH: /home/sm/Programmierung/Musicopy/bin
LIBRARY_OUTPUT_PATH: /home/sm/Programmierung/Musicopy/bin
[COLOR="#00FF00"]-- checking for module 'ncurses'
-- found ncurses, version 5.9.20110404[/COLOR]
PROJECT_SOURCE_DIR: /home/sm/Programmierung/Musicopy/src
PROJECT_INCLUDE_DIR: /home/sm/Programmierung/Musicopy/include
-- Configuring done
-- Generating done
-- Build files have been written to: /home/sm/Programmierung/Musicopy/build
make
Code:
Linking CXX executable ../bin/Musicopy
[100%] Built target Musicopy
Warum?
Also was ist jetzt bei ncurses++ anders als bei ncurses, obwohl das offenbar im gleichen Paket
Code:
Name : ncurses
Version : 5.9-6
Beschreibung : System V Release 4.0 curses emulation library
Architektur : x86_64
Code:
pkg-config --libs ncurses++
-lncurses++w -lpanelw -lmenuw -lformw -lncursesw
locate meint:
Code:
locate ncurses
/usr/bin/ncursesw5-config
/usr/include/ncurses.h
/usr/include/ncurses_dll.h
/usr/lib/libncurses.so
/usr/lib/libncurses.so.5
/usr/lib/libncurses.so.5.9
/usr/lib/libncursesw.so
/usr/lib/libncursesw.so.5
/usr/lib/libncursesw.so.5.9
/usr/lib/pkgconfig/ncurses++.pc
/usr/lib/pkgconfig/ncurses++w.pc
/usr/lib/pkgconfig/ncurses.pc
/usr/lib/pkgconfig/ncursesw.pc
/usr/share/licenses/ncurses
/usr/share/licenses/ncurses/license.txt
/usr/share/man/man1/ncursesw5-config.1.gz
/usr/share/man/man3/ncurses.3x.gz
Also was ist jetzt an ncurses++ anders? Brauch ich das für mein C++-Programm? Im Paketmanager hab ich keine gesonderte ncurses++ gefunden. Ich bin auf dem Gebiet noch irgendwie ziemlich leer im Kopf.