使用swig在android studio中对函数的未定义引用

时间:2017-04-09 06:26:46

标签: java c++ swig

我正在尝试使用android studio 2.3构建本机android应用程序示例,但仍然停留在某一点上。该项目的代码如下

MainActivity.java

package com.example.angelica.testfive;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    static {
        System.loadLibrary("summer");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Example of a call to a native method
        TextView tv = (TextView) findViewById(R.id.sample_text);
        tv.setText(summer.getSum(2,10).toString());
    }


}

summer.h

#ifndef TESTFIVE_SUMMER_H
#define TESTFIVE_SUMMER_H

#ifdef __cplusplus
#define EXTERN extern "C"
#else
#define EXTERN
#endif

EXTERN char* getSum(int a, int b);
#endif //TESTFIVE_SUMMER_H

summer.cpp

#include "summer.h"
#include <stdio.h>

char* getSum(int a, int b) {
    int result = a + b;
    char szResult[100];
    sprintf(szResult, "The Sum is : %d", result);
    return szResult;
}

CMakeList.txt

cmake_minimum_required(VERSION 3.4.1)

add_library(summer           
             SHARED             
             src/main/cpp/summer.cpp )

add_library(summer_wrap
             SHARED
             src/main/cpp/summer_wrap.cxx )


find_library(log-lib
              log )

target_link_libraries(summer_wrap
                       ${log-lib} )

我正在使用swig为我的c ++代码生成.java包装器。

swig -c++ -java -package com.example.angelica.testfive summer.i

生成的文件如下:

summer_wrap.cxx
summer.java
summerJNI.java

根据我的知识,如果我没有错,可能一切都很顺利。

但是当我点击android studio ide中的调试应用程序时。生成以下错误。

gradle build

这个错误真让我搞砸了。我知道我真的忘记了一些非常重要的事情,但我无法自己解决这个问题。

1 个答案:

答案 0 :(得分:0)

我怀疑这个错误是由于您将getSum声明为EXTERN但是在没有应用该链接类的情况下定义它而引起的。删除声明的那一部分或将其添加到定义应解决此问题。