2017-04-09 67 views
0

我想使用android studio 2.3构建本机android应用程序的例子,但坚持在一个点。该项目的代码如下在android工作室中使用swig的功能undefinite引用

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

我使用痛饮为我的C++代码的.java包装。产生

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

文件内容如下:

summer_wrap.cxx 
summer.java 
summerJNI.java 

高达这里一切都会好按我的知识,如果我没看错的/可能。

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

gradle build

这个错误实在是搞乱了我。我知道我真的忘记了一些非常重要的东西,但我无法自己想出来。

+0

'target_link_libraries(summer,summer_wrap)'? –

+0

@JosephThomson仍然面临同样的问题。我确信我做错了 – Angelica

+0

对不起。我的意思是相反的。尝试为'summer_wrap'的库列表添加'summer'。问题是''summer_wrap'找不到'getSum'函数,这意味着链接/导出失败了。 –

回答

0

我怀疑这个错误是由于你声明getSumEXTERN,但是没有应用这个连接类来定义它。要么删除声明的这一部分,要么将其添加到定义中应该可以解决此问题。