2017-04-09 192 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,但是沒有應用這個連接類來定義它。要麼刪除聲明的這一部分,要麼將其添加到定義中應該可以解決此問題。