2011-07-02 82 views
1

插件必須調用外部相關dll文件中的函數。 我跟着教程,做了以下,但仍然沒有成功。使用Firebreath中的CMake將附屬的Dll添加到NPAPI插件項目中

  • 我在我的項目根目錄下粘貼了sample.dll文件。

  • 我已經添加下列配置。projectDef.cmake(項目\ 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解決方案的項目屬性 - >配置屬性 - > linker-> Input->其他依賴項具有適當的dll絕對路徑。
  • 我加入PluginTestAPI.cpp如下:

    include "sample.h" 
    

生成錯誤:

無法打開包含文件 「sample.h」:沒有這樣的文件或目錄。

該dll文件是一個頭文件和lib文件的包。我能夠使用JNA成功調用dll。

我是一名Java開發人員,在C++編程方面經驗不足。我相信我缺少一些根本性的東西。

謝謝!

回答

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實際上在做什麼。

希望有幫助!

+0

謝謝。這工作。 – Yeshvanthni

+0

優秀...現在標記爲答案=] – taxilian

相關問題