cmake или g ++: включают библиотеки dll - PullRequest
0 голосов
/ 02 октября 2018

Я пытался написать код на C ++ под Windows, который использует стороннюю библиотеку (у меня есть файлы .dll, .lib и .h).Я пробовал так много конфигураций в CMAKE (я использую CLion), но ни одна из них не сработала!до сих пор не могу найти библиотеку.Поэтому я решил использовать простую команду g++.Еще ничего!!На изображении ниже показано дерево файлов My project file tree

Это мои последние cmakelists.txt:

cmake_minimum_required(VERSION 3.12)
project(tf_cert_mngr)
set(CMAKE_CXX_STANDARD 11)

set(LIBRARIES_DIR ${PROJECT_SOURCE_DIR}/openssl)
include_directories(src)
link_directories(${LIBRARIES_DIR}/lib)
include_directories(${LIBRARIES_DIR}/include)
#include_directories(include openssl\\include openssl\\lib2)

set(SOURCE_FILES src/Certificate.cpp src/tf-cert-mngr.cpp)
set(HEADER_FILES include/Certificate.h include/tf-cert-mngr.h)
find_package(ssl )
find_package(crypto)
add_executable(tf_cert_mngr ${SOURCE_FILES} ${HEADER_FILES})
target_link_libraries(tf_cert_mngr libssl.lib libcrypto.lib)

его результат:

[ 33%] Linking CXX executable tf_cert_mngr.exe
c:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../../mingw32/bin/ld.exe: cannot find -lssl
c:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../../mingw32/bin/ld.exe: cannot 
find -lcrypto
collect2.exe: error: ld returned 1 exit status
CMakeFiles\tf_cert_mngr.dir\build.make:101: recipe for target 'tf_cert_mngr.exe' failed
mingw32-make.exe[3]: *** [tf_cert_mngr.exe] Error 1
CMakeFiles\Makefile2:71: recipe for target 'CMakeFiles/tf_cert_mngr.dir/all' failed
mingw32-make.exe[2]: *** [CMakeFiles/tf_cert_mngr.dir/all] Error 2
mingw32-make.exe[1]: *** [CMakeFiles/tf_cert_mngr.dir/rule] Error 2
CMakeFiles\Makefile2:83: recipe for target 'CMakeFiles/tf_cert_mngr.dir/rule' 
failed
Makefile:117: recipe for target 'tf_cert_mngr' failed
mingw32-make.exe: *** [tf_cert_mngr] Error 2

и это последняя команда g ++, которую я использовал:

g++ src\tf-cert-mngr.cpp src\Certificate.cpp -Iinclude -I openssl\include  -L openssl\lib -llibcrypto.lib -l libssl.lib -o tester

ее результат:

c:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../../mingw32/bin/ld.exe: cannot find -llibcrypto.lib
c:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../../mingw32/bin/ld.exe: cannot find -llibssl.lib
collect2.exe: error: ld returned 1 exit status

1 Ответ

0 голосов
/ 02 октября 2018

Посмотрите документацию для FindOpenSSL.cmake.Это сценарий, который вызывается внутри системы при вызове:

find_package(OpenSSL) (обратите внимание, что для переносимости важен регистр).

Обратите внимание, что сценарий создает две цели:

Этот модуль определяет следующие ИМПОРТИРОВАННЫЕ цели:

OpenSSL::SSL

Библиотека OpenSSL ssl, если найдена.

OpenSSL::Crypto

Шифрованная библиотека OpenSSL, если она найдена.

Поэтому попробуйте изменить файл CMakeLists.txt следующим образом:

find_package(OpenSSL REQUIRED)

...

target_link_libraries(tf_cert_mngr OpenSSL::SSL OpenSSL::Crypto)

Ссылка: https://cmake.org/cmake/help/latest/module/FindOpenSSL.html

...