2017-04-09 6 views
0

アンドロイドスタジオ2.3を使用してネイティブアンドロイドアプリケーションの例を構築しようとしていますが、ある時点で固執しています。次のようにプロジェクトのコードはswigを使用してアンドロイドスタジオの関数への参照が未定義

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を使用しています。次のように生成された

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

ファイルは、次のとおりです。

summer_wrap.cxx 
summer.java 
summerJNI.java 

私は多分/間違っていないよ場合は、ここですべてが私の知識あたりとしては良い起こっている点で最大。

しかし、私はアンドロイドスタジオideでデバッグアプリをクリックします。次のエラーが発生します。

gradle build

このエラーは、本当に私をめちゃくちゃにされています。私は本当に重要なことを本当に忘れていることは知っていますが、私自身はそれを理解することができません。

+0

'target_link_libraries(summer、summer_wrap)'? –

+0

@JosephThomsonはまだ同じ問題に直面しています。私は間違っていると確信しています – Angelica

+0

申し訳ありません。私は別の方法を意味した。 'summer_wrap'のライブラリのリストに' summer'を追加してみてください。問題は、 'summer_wrap'が関数' getSum'を見つけることができないということです。これは、リンク/エクスポートがどこかで失敗していることを意味します。 –

答えて

0

getSumEXTERNと宣言し、そのリンククラスを適用せずに定義するとエラーが発生していると思われます。宣言のその部分を削除するか、定義に追加してこの問題を解決する必要があります。

関連する問題