アンドロイドスタジオ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でデバッグアプリをクリックします。次のエラーが発生します。
このエラーは、本当に私をめちゃくちゃにされています。私は本当に重要なことを本当に忘れていることは知っていますが、私自身はそれを理解することができません。
'target_link_libraries(summer、summer_wrap)'? –
@JosephThomsonはまだ同じ問題に直面しています。私は間違っていると確信しています – Angelica
申し訳ありません。私は別の方法を意味した。 'summer_wrap'のライブラリのリストに' summer'を追加してみてください。問題は、 'summer_wrap'が関数' getSum'を見つけることができないということです。これは、リンク/エクスポートがどこかで失敗していることを意味します。 –