Ошибка при установке сборки libssh с помощью make install - PullRequest
0 голосов
/ 14 ноября 2018

ОС и предыстория CMake

Я пытаюсь установить libssh в Debian GNU / Linux 9.5. Я успешно собрал исходный код libssh с помощью cmake и поместил весь контент в build dir, который я создал, как рекомендовано в руководстве по установке. (Обратите внимание, что я не собрал исходный код с помощью zlib, поскольку он является необязательным). Примечание. При сборке исходного кода с помощью cmake не было ошибок.

Руководство по установке libssh

Проблема: ошибка с make install

В руководстве по установке теперь предлагается установить libssh, запустив

сделать установку

в build реж. Теперь, если я это сделаю, я получу следующее сообщение об ошибке:

[ 84%] Linking CXX executable libsshpp_noexcept
CMakeFiles/libsshpp_noexcept.dir/libsshpp_noexcept.cpp.o: In function `main':
libsshpp_noexcept.cpp:(.text+0xb2): undefined reference to `std::cout'
libsshpp_noexcept.cpp:(.text+0xb7): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
libsshpp_noexcept.cpp:(.text+0xcd): undefined reference to `std::cout'
libsshpp_noexcept.cpp:(.text+0xd2): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
libsshpp_noexcept.cpp:(.text+0xdc): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
libsshpp_noexcept.cpp:(.text+0xe7): undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
CMakeFiles/libsshpp_noexcept.dir/libsshpp_noexcept.cpp.o: In function `__static_initialization_and_destruction_0(int, int)':
libsshpp_noexcept.cpp:(.text+0x163): undefined reference to `std::ios_base::Init::Init()'
 libsshpp_noexcept.cpp:(.text+0x178): undefined reference to `std::ios_base::Init::~Init()'
 CMakeFiles/libsshpp_noexcept.dir/libsshpp_noexcept.cpp.o:(.data.DW.ref.__gxx_personality_v0[DW.ref.__gxx_personality_v0]+0x0): undefined reference to `__gxx_personality_v0'
collect2: error: ld returned 1 exit status
examples/CMakeFiles/libsshpp_noexcept.dir/build.make:96: recipe for target 'examples/libsshpp_noexcept' failed
make[2]: *** [examples/libsshpp_noexcept] Error 1
CMakeFiles/Makefile2:431: recipe for target 'examples/CMakeFiles/libsshpp_noexcept.dir/all' failed
make[1]: *** [examples/CMakeFiles/libsshpp_noexcept.dir/all] Error 2
Makefile:149: recipe for target 'all' failed
make: *** [all] Error 2

Что является причиной этой проблемы и как я могу ее решить?

1 Ответ

0 голосов
/ 09 марта 2019

В сборке libssh есть несколько примеров файлов внутри ../libssh/build/examples о том, как использовать библиотеку.Если вы хотите установить libssh с make install, Makefile2 внутри ../libssh/build/CMakeFiles указывает, что файлы примеров также скомпилированы с вашей установкой.Теперь проблема заключалась в том, что в этих файлах примеров есть некоторые ошибки внутри, поэтому компиляция / установка libssh была решена с ошибкой, указанной в приведенном выше вопросе.

Теперь, чтобы решить эту проблему, необходимо удалить libsshpp_noexcept.dir и libsshpp.dir внутри папки ../libssh/build/examples/CMakeFiles.Чтобы установка прошла успешно, вы также должны удалить соответствующие строки кода в Makefile2 (внутри ../libssh/build/CMakeFiles), которые отвечают за компиляцию этих двух файлов примеров.Откройте Makefile2 в предпочитаемом вами текстовом редакторе и найдите examples/CMakeFiles/libsshpp_noexcept.dir/build и examples/CMakeFiles/libsshpp.dir/build в файле.Теперь вам нужно удалить все, что проверяет и устанавливает / компилирует эти два файла / dirs.Я удалил следующие части:

# =================================================

удалить все внутри здесь

...

# ========================================================

Удаляя содержимое внутри разделителей, вы удаляете процедуру установки / компиляции двух (не обязательных) примеров файлов, предоставляемых libssh.

Теперь запустите make install внутри ../libssh/build, и вы должныидти.

...