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

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;
};

其中核心API定义为:
#ifdef CORE_DLL
#define CORE_API    __attribute__ ((dllexport))
#else
#define CORE_API    __attribute__ ((dllimport))
#endif

在Android.mk for core中,我在本地标志下定义了core-DLL。但是,在建造时,我得到了警告:
warning: 'dllimporot' attribute directive ignored

当ndk build到达我要使用AutoLock类的另一个项目时,我得到错误:
error: 'AutoLock::AutoLock()' is private
error: within this context

为什么编译器会忽略dllexport属性?我希望一旦修复了这个问题,我的另一个项目应该能够构建并使用AutoLock类而不会出现任何问题。

最佳答案

在Android(Linux)上创建共享库的方式不同于Windows。
在Windows中有特殊的dllimport和dllexport指令,但在Android(Linux)上没有。
在使用共享库时,应该使用-lYourLibraryName编译
这可能有助于您:http://www.adp-gmbh.ch/cpp/gcc/create_lib.html

10-08 03:43