[英]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上的相同模式。 我犯了同樣的錯誤 。
您應該在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.