Добавление зависимой библиотеки DLL в проект плагина NPAPI с использованием CMake в Firebreath - PullRequest
1 голос
/ 02 июля 2011

Плагин должен вызывать функции во внешнем зависимом 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"build "

    • Свойства проекта сгенерированного решения Firebreath -> Свойства конфигурации-> linker-> Input-> Дополнительные зависимости имеют соответствующий абсолютный путь dll.
  • Я добавил следующее в PluginTestAPI.cpp:

    include "sample.h"
    

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

Невозможно открыть включаемый файл "sample.h": такого файла нетили каталог.

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

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

Спасибо!

1 Ответ

3 голосов
/ 03 июля 2011

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

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

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

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

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

...