插件必须调用外部相关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项目构建”
我在PluginTestAPI.cpp中添加了以下内容:
include "sample.h"
构建错误:
无法打开包含文件“sample.h”:没有这样的文件或目录。
dll文件是头文件和lib文件的包。我能够使用JNA成功调用dll。
我是一名Java开发人员,在C ++编程方面经验不足。我相信我错过了一些基本的东西。
谢谢!
答案 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实际上在做什么。
希望有所帮助!