Ho il seguente errore quando provavo a compilare un programma c ++ mentre collegavo la libreria Libssh su Windows (pacchetti libssh-common e libssh-devel entrambi installati con cygwin). Clion non mi dà un errore di inclusione e cmake trova la libreria durante la ricarica di Clion di Cmake, ma durante la compilazione / collegamento si lamenta che i riferimenti non sono definiti.
Qualcuno potrebbe sottolineare il mio stupido errore? Grazie in anticipo!
Scanning dependencies of target main
[ 50%] Building CXX object CMakeFiles/main.dir/main.cpp.o
[100%] Linking CXX executable main.exe
CMakeFiles/main.dir/main.cpp.o:main.cpp:(.text+0x30): undefined reference to `ssh_new'
CMakeFiles/main.dir/main.cpp.o:main.cpp:(.text+0x30): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `ssh_new'
collect2: error: ld returned 1 exit status
my CmakeLisst.txt
add_executable(main main.cpp)
find_package(LIBSSH)
IF (LIBSSH_FOUND)
message(${LIBSSH_VERSION})
include_directories(${LIBSSH_INCLUDE_DIR})
link_directories(${LIBSSH_INCLUDE_DIR})
target_link_libraries(main ${LIBSSH_LIBRARIE})
endif ()
output Cmake ricaricare
C:\Users\seven\.CLion2018.3\system\cygwin_cmake\bin\cmake.exe -DCMAKE_BUILD_TYPE= -DCMAKE_MAKE_PROGRAM=C:/cygwin64/bin/make.exe -DCMAKE_C_COMPILER=C:/cygwin64/bin/gcc.exe -DCMAKE_CXX_COMPILER=C:/cygwin64/bin/g++.exe -G "CodeBlocks - Unix Makefiles" "/cygdrive/c/Users/seven/Documents/github/Server control"
0.7.5
-- Configuring done
-- Generating done
-- Build files have been written to: /cygdrive/c/Users/seven/Documents/github/Server control/cmake-build-default-cygwin
[Finished]
main.cpp
#include <stdlib.h>
#include <iostream>
#define LIBSSH_STATIC 1
#include <libssh\libssh.h>
int main() {
std::cout << "Hello world" << std::endl;
ssh_session my_ssh_session = ssh_new();
return 0;
}
--update 1-- CmakeOutput.log github gist
--SOLUZIONE----
Ho dovuto cambiare la mia cmakelist in quanto segue
find_package(LIBSSH)
IF (LIBSSH_FOUND)
message(${LIBSSH_VERSION})
include_directories(${LIBSSH_INCLUDE_DIR})
link_directories(${LIBSSH_LIBRARY_DIR})
target_link_libraries(main -L${LIBSSH_LIBRARY} -lssh)
endif ()
make VERBOSE=1
dalla riga di comando, dove Makefile
si trova il tuo progetto (possibilmente cambia un file sorgente per forzare la compilazione). Quindi, cercare la ld
riga di comando nell'output di generazione.
make VERBSOE=1
. Ho guardato nell'output e non ho trovato il comando ld. fare un output dettagliato. Grazie per la risposta!
LIBSSH_FOUND
parte inCMakeLists.txt
sia eseguita? Prova a ispezionareCMakeOutput.log
eCMakeError.log
per accertarti di possibili suggerimenti utili