我有一个核心项目,我正在构建一个共享库。在其中一个标题中,我定义了一个如下所示的简单类:
typedef pthread_mutex_t Mutex;
class CORE_API AutoLock
{
public:
AutoLock(Mutex& m);
~AutoLock();
private:
AutoLock();
AutoLock(const AutoLock&);
AutoLock& operator=(const AutoLock&);
Mutex m_Mutex;
};
其中CORE_API定义为:
#ifdef CORE_DLL
#define CORE_API __attribute__ ((dllexport))
#else
#define CORE_API __attribute__ ((dllimport))
#endif
在Android.mk for core中,我在LOCAL_CFLAGS下定义了CORE_DLL。但是,在建设时,我会收到警告:
warning: 'dllimporot' attribute directive ignored
当ndk-build到达我想使用AutoLock类的另一个项目时,我收到错误:
error: 'AutoLock::AutoLock()' is private
error: within this context
为什么编译器会忽略dllexport属性?我希望一旦修复,我的其他项目应该构建并能够毫无问题地使用AutoLock类。
答案 0 :(得分:0)
在Android(Linux)上创建的共享库与Windows不同。 在Windows中,您有特殊的dllimport和dllexport指令,但不适用于Android(Linux)。
使用共享库时,应该使用-lYourLibraryName
进行编译答案 1 :(得分:0)
看看android-ndk中提供的示例代码,特别是Android.mk文件,这可能会解决您的问题。