簡體   English   中英

使用__declspec(dllexport)時出錯:未知類型名稱'__declspec'

[英]Error using __declspec(dllexport) : Unknown type name '__declspec'

我正在嘗試使用macOS mojave上的終端從c ++使用NDK將函數導出到共享庫( .so )。 我已經安裝了命令行工具和Xcode的最新版本。

這是我要導出的GetNumber()

#include <iostream>
#define DllExport __declspec(dllexport)

extern "C" {
   DllExport int GetNumber() {
      return 5 ;
   }
} 

使用NDK編譯代碼后,它將引發以下錯誤

在此處輸入圖片說明

我試用了clang和Xcode編譯器,並嘗試了Windows和Ubuntu上的相同模式。 我犯了同樣的錯誤 。

我遵循的教程使用ndk導出共享庫

您應該在Android平台上使用JNIEXPORT而不是DllExport

您在問題中提供的參考教程對於當前的Android NDK開發而言太舊了。

通常,如果您想在跨平台構建中使用declspec,給定一個項目ABC ,那么您將擁有大致這樣的內容:

在dll構建過程中,執行導出的Windows項目聲明如下:

#define ABC_EXPORT

所有非Windows項目或計划與該項目的lib版本(以及項目本身的lib版本)進行交互的項目都聲明:

#define ABC_LIB

那么您就可以在項目中:

#ifdef ABC_LIB //or #if (defined(ABC_LIB) || !defined(WIN32))
  #define ABC_API
#else
  #ifdef ABC_EXPORT 
    #define ABC_API __declspec(dllexport)
  #else
    #define ABC_API __declspec(dllimport)
  #endif
#endif

然后,將所有函數聲明為:

ABC_API void foo();

更好的是,如果您具有操作系統的阻礙層,則可以使用另一個#define而不是__declspec來完全確保POSIX構建無需擔心這些問題。

我強烈建議改用導出文件,因為這很不好玩。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM