Errors during compilation

img2

I get errors during compilation time, both libraries i am trying to compile are unluckly configurated with cmake, and i need to pass somehow the path to the static .a lib for mingw, in Qt i simply specify the path, but if i do it here, as awlays it complains that there’s something wrong. I tried to use target_link_libraries, but it does’t work at all, and the other one add_library requires a source file, which i don’t have.

Can you share the CMake code you’re using?

It’s not the code i write, i don’t use cmake at all, unless i am forced to, but there is a cmakelist made by i assume the people that release the lib. I have 2 of them, and 1 requires the other, so i need to specify somehow where is the other lib.


# Copyright (c) 2014, 2015  Alexander Lamaison <alexander.lamaison@gmail.com>
#
# Redistribution and use in source and binary forms,
# with or without modification, are permitted provided
# that the following conditions are met:
#
#   Redistributions of source code must retain the above
#   copyright notice, this list of conditions and the
#   following disclaimer.
#
#   Redistributions in binary form must reproduce the above
#   copyright notice, this list of conditions and the following
#   disclaimer in the documentation and/or other materials
#   provided with the distribution.
#
#   Neither the name of the copyright holder nor the names
#   of any other contributors may be used to endorse or
#   promote products derived from this software without
#   specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
# CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
# OF SUCH DAMAGE.

cmake_minimum_required(VERSION 2.8.11)

set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)

project(libssh2 C)
set(PROJECT_URL "https://www.libssh2.org/")
set(PROJECT_DESCRIPTION "The SSH library")

if (CMAKE_VERSION VERSION_LESS "3.1")
  if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
    set (CMAKE_C_FLAGS "--std=gnu90 ${CMAKE_C_FLAGS}")
  endif()
else()
  set (CMAKE_C_STANDARD 90)
endif()

option(BUILD_SHARED_LIBS "Build Shared Libraries" OFF)

# Parse version

file(READ ${CMAKE_CURRENT_SOURCE_DIR}/include/libssh2.h _HEADER_CONTENTS)
string(
  REGEX REPLACE ".*#define LIBSSH2_VERSION[ \t]+\"([^\"]+)\".*" "\\1"
  LIBSSH2_VERSION "${_HEADER_CONTENTS}")
string(
  REGEX REPLACE ".*#define LIBSSH2_VERSION_MAJOR[ \t]+([0-9]+).*" "\\1"
  LIBSSH2_VERSION_MAJOR "${_HEADER_CONTENTS}")
string(
  REGEX REPLACE ".*#define LIBSSH2_VERSION_MINOR[ \t]+([0-9]+).*" "\\1"
  LIBSSH2_VERSION_MINOR "${_HEADER_CONTENTS}")
string(
  REGEX REPLACE ".*#define LIBSSH2_VERSION_PATCH[ \t]+([0-9]+).*" "\\1"
  LIBSSH2_VERSION_PATCH "${_HEADER_CONTENTS}")

if(NOT LIBSSH2_VERSION OR
   NOT LIBSSH2_VERSION_MAJOR MATCHES "^[0-9]+$" OR
   NOT LIBSSH2_VERSION_MINOR MATCHES "^[0-9]+$" OR
   NOT LIBSSH2_VERSION_PATCH MATCHES "^[0-9]+$")
  message(
    FATAL_ERROR
    "Unable to parse version from"
    "${CMAKE_CURRENT_SOURCE_DIR}/include/libssh2.h")
endif()

include(GNUInstallDirs)
install(
  FILES docs/AUTHORS COPYING docs/HACKING README RELEASE-NOTES NEWS
  DESTINATION ${CMAKE_INSTALL_DOCDIR})

include(max_warnings)
include(FeatureSummary)

add_subdirectory(src)

option(BUILD_EXAMPLES "Build libssh2 examples" ON)
if(BUILD_EXAMPLES)
  add_subdirectory(example)
endif()

option(BUILD_TESTING "Build libssh2 test suite" ON)
if(BUILD_TESTING)
  enable_testing()
  add_subdirectory(tests)
endif()

option(LINT "Check style while building" OFF)
if(LINT)
  add_custom_target(lint ALL
    ./ci/checksrc.sh
    WORKING_DIRECTORY ${libssh2_SOURCE_DIR})
  add_dependencies(libssh2 lint)
endif()

add_subdirectory(docs)

feature_summary(WHAT ALL)

set(CPACK_PACKAGE_VERSION_MAJOR ${LIBSSH2_VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${LIBSSH2_VERSION_MINOR})
set(CPACK_PACKAGE_VERSION_PATCH ${LIBSSH2_VERSION_PATCH})
set(CPACK_PACKAGE_VERSION ${LIBSSH2_VERSION})
include(CPack)


This is the only line i added include_directories(C:/Users/abcd123/Documents/Qt_Projects/openssl-cmake-master-build/ssl/libssl.a)

I tried to use target_link_libraries but it requires the source files which i am not aware of, idk which are the source files for that specific lib, when i din’t make it, not to mention that most libs have multiple source files.

This doesn’t seem like it’d do much since libssl.a is unlikely to be a directory containing headers.

Whichever target is missing the OpenSSL symbols will need a target_link_libraries(that_target PRIVATE path/to/libssl.a). There may be more than one.

“target_link_libraries(that_target PRIVATE path/to/libssl.a)” And what is "that_target "? I undesrtand that it’s some kind of variable that somewhere should be used later or what?

Turned out that there’s another cmake file in the build folder looking for this lib, i downloaded the binaries in exe file, install them, and now it’s found automatically… Idk why thise tools have to be that twisted, that you don’t really know what’s going on, rather then define everything in one specific file or files in the same folder, it’s scattered everywhere around, and since it’s made by someoen else, you clearly can’t know what’s going on…

The next problem is that curl has both static lib, and also a shared dll option, and the thing is that the static lib compiles, but the shared doesn’t, cause it’s now complaining that there are no dll’s of the ssh2, now i understand that i have to add them manually cause this didn’t get automatically detected?

It’s whatever target has the errors you posted at the beginning. There’s no context there, so I can’t help based on that image.

Doesn’t work at all, “CMakeLists.txt:63: error: Cannot specify link libraries for target “CURL” which is not built by this project.”, regardless what i put as a target :man_facepalming:

And also this solution, it’s not at all what i was looking for, i need to link an EXISTING library, not a new build with cmake, i don’t want to build anything else than the current library, not all the dependencies.
Someone suggested something like this

add_library(DLL_CRYPTO SHARED IMPORTED)
set_target_properties(DLL_CRYPTO PROPERTIES IMPORTED_LOCATION C:/Users/abcd123/Documents/Qt_Projects/curl_libs/libcrypto-1_1-x64.dll)

add_library(DLL_SSL SHARED IMPORTED)
set_target_properties(DLL_SSL PROPERTIES IMPORTED_LOCATION C:/Users/abcd123/Documents/Qt_Projects/curl_libs/libssl-1_1-x64.dll)

This thing at least compiles finnaly without errors, but it changes nothing, i still get the compiler errors complaining about missing dll’s. Why is this?