1

该插件必须调用外部依赖 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 projects build”生成了解决方案文件

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

    include "sample.h"
    

构建错误:

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

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

我是一名 Java 开发人员,在 C++ 编程方面没有太多经验。我相信我缺少一些基本的东西。

谢谢!

4

1 回答 1

3

您需要了解的主要内容是您实际上并没有链接到 DLL。相反,您链接到 DLL 附带的 .lib 文件,该文件将在幕后为您加载 DLL。无论您在哪里构建依赖 dll,您都会发现还有一个 .lib 文件;将其指定为 target_link_libraries 中的链接目标。

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

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

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

希望有帮助!

于 2011-07-03T06:39:40.670 回答