我有一个核心项目,我正在将其构建为共享库。在集流管的一个中,我定义如下所示的简单类:在Android上导出共享库类的问题
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为核心,我已经在确定的CORE_DLL LOCAL_CFLAGS。然而,建立的时候,我得到警告:
warning: 'dllimporot' attribute directive ignored
当NDK,构建得到的地方,我想用自锁类的其他项目中,我得到的错误:
error: 'AutoLock::AutoLock()' is private
error: within this context
为什么会产生编译器忽略dllexport属性?我希望一旦这个问题得到解决,我的另一个项目应该能够构建并且能够使用AutoLock类而不会有任何问题。
我已经尝试添加:-L $(LOCAL_PATH)/../../ libs/armeabi -lcore到我的Android.mk文件,但不幸的是我仍然得到'AutoLock :: AutoLock()'是私人错误。 – derek 2011-12-27 22:23:35
我给你的解决方案与该错误无关。它只处理你在dllimport和dllexport上的错误。 AutoLock错误是非常明显的...如果你想构建一个对象,将AuthLock()构造函数移动到公共范围 – flumpb 2011-12-27 23:29:07
这很有趣;我只是意识到错误消息引用了默认的构造函数,但是这不会在任何地方使用。我已经离开了那个私人的,并且故意未定义,因为我只想让AutoLock与一个Mutex一起使用。错误引用的行是:AutoLock(m_CommandMutex);所以我不确定它为什么抱怨默认是私人的。公开并定义它可以消除这个错误。 – derek 2011-12-28 00:18:28