需要NDK帮助:如何从另一个使用C ++的项目调用共享库的C ++函数

时间:2013-04-18 13:38:29

标签: android-ndk

我很难拉扯我的头发,因为无法搞清楚(即使在谷歌搜索了很多)。请帮忙

情况:

  1. 我有一个共享库。让我们说foo.so(完全用C ++编写的代码)
  2. 现在在一个新项目中,我想使用这个共享库foo.so
  3. 新的项目代码也是用C ++编写的。让我们说新项目名称是fooMate。
  4. 我想调用函数的函数或在fooMate项目cpp文件中使用foo类,而不包括foo项目的实际源代码(即只使用foo.so文件)
  5. 问题: 我们怎样才能做到这一点?

    例如:

    class foo
    {
    const char* giveMeAString();
    }
    
    #include “foo.h”
    
    const char* foo::giveMeAString()
    {
    return “Hello World!”;
    }
    

    现在我已经在共享库中成功编译了foo类:foo.so

    1. 现在假设我正在编写另一个也有一些CPP代码的项目。但是这个新的CPP代码想要重用静态库。

      //声明

    2.   

      class fooMate       {        void printDemo();       }

      //实施

      #include “fooMate.h”
      #include “foo.h”
      
      void fooMate::printDemo()
      {
      foo *testFoo = new foo();
      cout<<giveMeAString();
      }
      

      如何通过使用foo.so文件而不是使用foo.cpp的实际源代码来实现此目的

      以下是我正在使用的Android.mk文件

      #Adding foo.so file in project.
      LOCAL_PATH := $(call my-dir)
      include $(CLEAR_VARS)
      
      LOCAL_MODULE := foo-lib-module
      LOCAL_SRC_FILES := foo-lib.so
      LOCAL_EXPORT_C_INCLUDES := include
      include $(PREBUILT_SHARED_LIBRARY)
      
      #New Project and Source code
      include $(CLEAR_VARS)
      LOCAL_MODULE := foomate-module
      LOCAL_MODULE_FILENAME := foomate-lib
      
      LOCAL_SRC_FILES := fooMate.cpp
      LOCAL_C_INCLUDES := $(LOCAL_PATH)/Classes/include
      
      include $(BUILD_SHARED_LIBRARY)
      

0 个答案:

没有答案