Добавление зависимой библиотеки DLL в проект подключаемого модуля NPAPI с помощью CMake в Firebreath

Плагин должен вызывать функции во внешнем зависимом файле dll. Я следовал учебнику и сделал следующее, но все равно не добился успеха.

  • Я вставил файл sample.dll в корень моего проекта.

  • Я добавил следующую конфигурацию в projectDef.cmake (projects\plugintest\Win\projectDef.cmake):

    set (LIBRARY_PATH "${CMAKE_CURRENT_SOURCE_DIR}/sample.dll")
    target_link_libraries(${PROJECT_NAME} debug "${LIBRARY_PATH}/debug/sample.dll")
    target_link_libraries(${PROJECT_NAME} optimized "${SANDSTONE_DIR}/release/sample.dll")
    
  • Я создал файл решения, используя "сборку проектов firebreath\prep2010.cmd"

    • The generated firebreath solution's project properties->Configuration properties->linker->Input->Additional dependecies has the appropriate absolute path of dll.
  • Я добавил следующее в PluginTestAPI.cpp:

    include "sample.h"
    

Ошибки сборки:

Не удается открыть включаемый файл «sample.h»: нет такого файла или каталога.

Файл dll представляет собой пакет из файла заголовка и файла lib. Я могу успешно совершать вызовы dll с помощью JNA.

Я разработчик Java и не имею большого опыта программирования на C++. Я считаю, что мне не хватает чего-то фундаментального.

Спасибо!


person Yeshvanthni    schedule 02.07.2011    source источник


Ответы (1)


Главное, что вам нужно понять, что вы здесь упускаете, это то, что вы на самом деле не ссылаетесь на DLL; вместо этого вы связываетесь с файлом .lib, который идет с DLL, и который будет выполнять загрузку DLL для вас за кулисами. Где бы вы ни создавали свою зависимую dll, вы обнаружите, что есть также файл .lib; укажите это в качестве цели ссылки в target_link_libraries.

Затем, если вы хотите, чтобы он открыл включаемый файл «sample.h», вам нужно добавить путь к sample.h в ваши включаемые каталоги с помощью cmake include_directories.

Я подозреваю, что это опечатка, но вы также дважды указали sample.dll; один раз в LIBRARY_PATH, а затем один раз в вызове target_link_libraries. Это не сработает, так как это заставит его попытаться связать с ${CMAKE_CURRENT_SOURCE_DIR}/sample.dll/debug/sample.dll

Когда ничего не помогает, откройте свойства проекта в Visual Studio (поскольку это то, что вы используете) и посмотрите, какие библиотеки и каталоги есть; это часто поможет вам понять, что на самом деле делает cmake.

Надеюсь, это поможет!

person taxilian    schedule 03.07.2011