在Android上为共享库导出类时出现问题

时间:2011-12-27 21:47:20

标签: android c++ c arm gnu

我有一个核心项目,我正在构建一个共享库。在其中一个标题中,我定义了一个如下所示的简单类:

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类。

2 个答案:

答案 0 :(得分:0)

在Android(Linux)上创建的共享库与Windows不同。 在Windows中,您有特殊的dllimport和dllexport指令,但不适用于Android(Linux)。

使用共享库时,应该使用-lYourLibraryName

进行编译

这可能会对您有所帮助:http://www.adp-gmbh.ch/cpp/gcc/create_lib.html

答案 1 :(得分:0)

看看android-ndk中提供的示例代码,特别是Android.mk文件,这可能会解决您的问题。