使用Firebreath中的CMake将相关Dll添加到NPAPI插件项目中

时间:2011-07-02 03:03:17

标签: plugins cmake npapi 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项目构建”

    • 生成的firebreath解决方案的项目属性 - >配置属性 - >链接器 - >输入 - >其他依赖项具有相应的dll绝对路径。
  • 我在PluginTestAPI.cpp中添加了以下内容:

    include "sample.h"
    

构建错误:

无法打开包含文件“sample.h”:没有这样的文件或目录。

dll文件是头文件和lib文件的包。我能够使用JNA成功调用dll。

我是一名Java开发人员,在C ++编程方面经验不足。我相信我错过了一些基本的东西。

谢谢!

1 个答案:

答案 0 :(得分:3)

你需要明白的是,你在这里缺少的是你实际上没有链接到DLL;相反,您链接到与DLL一起使用的.lib文件,并将在幕后为您加载DLL。无论你在哪里构建你的依赖dll,你都会发现还有一个.lib文件;将其指定为target_link_libraries中的链接目标。

接下来,如果您想要打开包含文件“sample.h”,则需要使用cmake include_directories命令将sample.h的路径添加到include目录。

我怀疑这是一个错字,但你也指定了两次sample.dll;一次在LIBRARY_PATH中,然后一次在你的target_link_libraries调用中。这不会起作用,因为它会导致它尝试链接到$ {CMAKE_CURRENT_SOURCE_DIR} /sample.dll/debug/sample.dll

当所有其他方法都失败时,在visual studio中打开项目属性(因为这就是你正在使用的)并查看库中的库和包含目录;这通常可以帮助您了解cmake实际上在做什么。

希望有所帮助!