2017-04-09 1 views
0

Ich versuche, native Android-Anwendungsbeispiel mit Android Studio 2.3 zu bauen, aber an einem Punkt stecken. Der Code des Projekts ist alsunzufriedener Hinweis auf Funktion in Android-Studio mit swig

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

ich swig bin mit dem .java-Wrapper für meinen C++ Code zu generieren.

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

Dateien erzeugt werden, sind wie folgt:

summer_wrap.cxx 
summer.java 
summerJNI.java 

Bis hier alles wie pro mein Wissen gut geht, wenn ich nicht falsch bin/vielleicht.

Aber wenn ich auf Debug-App im Android Studio IDE klicke. Folgefehler wird generiert.

gradle build

dieser Fehler vermasselst mich wirklich. Ich weiß, dass ich wirklich etwas wirklich Wichtiges vergesse, aber ich bin nicht in der Lage, es selbst herauszufinden.

+0

'target_link_libraries (Sommer, Sommer_Wrap)'? –

+0

@JosephThomson immer noch das gleiche Problem. Ich bin sicher, dass ich es falsch mache – Angelica

+0

Entschuldigung. Ich meinte es andersherum. Versuchen Sie, 'summer' zu der Liste der Bibliotheken für' summer_wrap' hinzuzufügen. Das Problem ist, dass 'summer_wrap' die Funktion' getSum' nicht finden kann, was bedeutet, dass das Verknüpfen/Exportieren irgendwo fehlschlägt. –

Antwort

0

Ich vermute, dass der Fehler dadurch verursacht wird, dass Sie getSum als EXTERN deklarieren, aber definieren, ohne dass diese Verbindungsklasse angewendet wird. Entweder den Teil der Deklaration löschen oder der Definition hinzufügen, sollte dieses Problem beheben.