Как управлять библиотеками при создании проектов? - PullRequest
1 голос
/ 15 апреля 2020

У меня есть проект XXX, который зависит от другого фреймворка YYY. Каркас обеспечивает YYYConfig.cmake. Когда я настраиваю свой проект с cmake-gui, я добавляю каркас к переменной YYY_DIR. Я генерирую и создаю решение. Теперь, когда я запускаю XXX.exe, я получаю ошибку, что .dll из YYY не может быть загружен. Библиотеки и файлы заголовков .lib найдены, если я прав.

В сети я видел, что .dll нужно поместить в ту же папку, где находится .exe. Но почему я не могу просто использовать .dll, который уже присутствует в папке установки YYY? И есть ли способ автоматически поместить все .dll, что нужно моему проекту, в нужную папку?

У меня такое ощущение, что мне не хватает немного фундаментальных знаний о развертывании, поэтому я очень признателен любая полезная ссылка или ссылка об этом. Спасибо.


Дополнительная информация

Я построил фреймворк, т.е. AliceVision с использованием vcpkg , cmake-gui и Visual Studio 2019. Папка установленного фреймворка содержит следующие папки:

  • bin со многими .exe и .dll
  • share где AliceVisionConfig.cmake находится в
  • include со многими .hpp каркаса и другими зависимостями
  • lib со многими .lib

Теперь я пытаюсь создать простой тестовый проект с main.cpp

#include <iostream>
#include <aliceVision/system/cpu.hpp>

int main()
{
    std::cout << "Total cpus " << aliceVision::system::get_total_cpus() << std::endl;
    return EXIT_SUCCESS;
}

и CMakeLists.txt

cmake_minimum_required(VERSION 3.3)

project(AliceVisionAs3rdParty)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(AliceVision CONFIG REQUIRED)
message(STATUS "Found AliceVision : ${AliceVision_FOUND}")
message(STATUS "Found AliceVision version: ${AliceVision_VERSION}")

add_executable(testAV3rd main.cpp)
target_link_libraries(testAV3rd PUBLIC aliceVision_system)

При настройке с cmake-gui в папке моего тестового проекта Я просто использую переменную AliceVision_DIR, чтобы указать на папку, в которой находится AliceVisionConfig.cmake. Я использую vcpkg для набора инструментов, который необходим фреймворку для некоторых зависимостей. Затем я создаю и строю решение. Здесь я запускаю .exe и получаю сообщение, что aliceVision_system.dll не может быть найден. Он присутствует в папке bin платформы и как aliceVision_system.lib в папке lib. Я проверил .exe с Зависимости и да, именно этот .dll не найден. Все Windows .dll вещи найдены ...

1 Ответ

0 голосов
/ 15 апреля 2020

Вы должны предоставить cmake your library:

add_library(aliceVision_system SHARED IMPORTED)

, если путь к этой предварительно скомпилированной библиотеке неизвестен, evtl. вам нужно попытаться определить link_directories(path_to_your_library).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...