<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css" style="display:none"><!--P{margin-top:0;margin-bottom:0;} .ms-cui-menu {background-color:#ffffff;border:1px rgb(171, 171, 171) solid;font-family:"Segoe UI WPC","Segoe UI",Tahoma,"Microsoft Sans Serif",Verdana,sans-serif;font-size:10pt;color:rgb(51, 51, 51);} .ms-cui-menusection-title {display:none;} .ms-cui-ctl {vertical-align:text-top;text-decoration:none;color:rgb(51, 51, 51);} .ms-cui-ctl-on {background-color:rgb(223, 237, 250);opacity: 0.8;} .ms-cui-img-cont-float {display:inline-block;margin-top:2px} .ms-cui-smenu-inner {padding-top:0px;} .ms-owa-paste-option-icon {margin: 2px 4px 0px 4px;vertical-align:sub;padding-bottom: 2px;display:inline-block;} .ms-rtePasteFlyout-option:hover {background-color:rgb(223, 237, 250) !important;opacity:1 !important;} .ms-rtePasteFlyout-option {padding:8px 4px 8px 4px;outline:none;} .ms-cui-menusection {float:left; width:85px;height:24px;overflow:hidden}
<!--
@font-face
        {font-family:"Malgun Gothic"}
@font-face
        {font-family:Calibri}
@font-face
        {}
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif"}
a:link, span.MsoHyperlink
        {color:blue;
        text-decoration:underline}
a:visited, span.MsoHyperlinkFollowed
        {color:purple;
        text-decoration:underline}
span.EmailStyle17
        {font-family:"Calibri","sans-serif";
        color:windowtext}
span.SpellE
        {}
.MsoChpDefault
        {font-family:"Calibri","sans-serif"}
@page WordSection1
        {margin:1.0in 1.0in 1.0in 1.0in}
div.WordSection1
        {}
-->
--></style>
</head>
<body>
<div style="font-size:12pt;color:#000000;background-color:#FFFFFF;font-family:Calibri,Arial,Helvetica,sans-serif;">
<link href="cid:filelist.xml@01D1F167.63E8C620" rel="File-List"><link href="/owa/~~themedata~~" rel="themeData"><link href="/owa/~~colorschememapping~~" rel="colorSchemeMapping"><style>
<!--
@font-face
        {font-family:"Malgun Gothic"}
@font-face
        {font-family:Calibri}
@font-face
        {}
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif"}
a:link, span.MsoHyperlink
        {color:blue;
        text-decoration:underline}
a:visited, span.MsoHyperlinkFollowed
        {color:purple;
        text-decoration:underline}
span.EmailStyle17
        {font-family:"Calibri","sans-serif";
        color:windowtext}
span.SpellE
        {}
.MsoChpDefault
        {font-family:"Calibri","sans-serif"}
@page WordSection1
        {margin:1.0in 1.0in 1.0in 1.0in}
div.WordSection1
        {}
-->
</style>
<div class="WordSection1">
<p class="MsoNormal"> </p>
<p class="MsoNormal">I am trying to build a library project in Android Studio, or using
<span class="SpellE">Gradle</span> command-line,</p>
<p class="MsoNormal">based on VTK 7.0.0 and <span class="SpellE">OpenCV</span> 3.1.0</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">I built the VTK libraries for Android arm64-v8a platform as static libraries (.a files)</p>
<p class="MsoNormal">and then included all of them in the <span class="SpellE">build.gradle</span> for my own library project.</p>
<p class="MsoNormal"><br type="_moz">
</p>
<p class="MsoNormal">For example, my build.gradle includes :</p>
<p class="MsoNormal"><br type="_moz">
</p>
<p class="MsoNormal">apply plugin: 'com.android.model.native'</p>
<p class="MsoNormal">def commonBase = "${projectDir}/../../../common"<br type="_moz">
</p>
<p class="MsoNormal">model {<br type="_moz">
    repositories {<br type="_moz">
        libs(PrebuiltLibraries) {</p>
<p class="MsoNormal">// (more vtk libraries here)<br type="_moz">
            vtkCommonColor {<br type="_moz">
                headers.srcDir "${commonBase}/thirdparty/vtk-7.0/include"<br type="_moz">
                binaries.withType(StaticLibraryBinary) {<br type="_moz">
                    staticLibraryFile = file("${commonBase}/thirdparty/vtk-7.0/lib/arm64-v8a/libvtkCommonColor-7.0.a")<br type="_moz">
                }<br type="_moz">
            }<br type="_moz">
            vtkCommonCore {<br type="_moz">
                headers.srcDir "${commonBase}/thirdparty/vtk-7.0/include"<br type="_moz">
                binaries.withType(StaticLibraryBinary) {<br type="_moz">
                    staticLibraryFile = file("${commonBase}/thirdparty/vtk-7.0/lib/arm64-v8a/libvtkCommonCore-7.0.a")<br type="_moz">
                }<br type="_moz">
            }<br type="_moz">
// more vtk libraries here</p>
<p class="MsoNormal">}</p>
<p class="MsoNormal">}</p>
<p class="MsoNormal">...</p>
<p class="MsoNormal">    android {<br type="_moz">
        compileSdkVersion 21<br type="_moz">
        buildToolsVersion "23.0.2"<br type="_moz">
<br type="_moz">
        defaultConfig {<br type="_moz">
            minSdkVersion.apiLevel 19<br type="_moz">
            targetSdkVersion.apiLevel 19<br type="_moz">
        }<br type="_moz">
<br type="_moz">
        sources {<br type="_moz">
            main {<br type="_moz">
                jni {<br type="_moz">
                    dependencies {</p>
<p class="MsoNormal">// more vtk libraries here <br type="_moz">
</p>
<p class="MsoNormal">                        library "vtkCommonColor" linkage "static"<br type="_moz">
                        library "vtkCommonCore" linkage "static"</p>
<p class="MsoNormal">// more vtk libraries here </p>
<p class="MsoNormal"><br type="_moz">
</p>
<p class="MsoNormal">...<br type="_moz">
</p>
<p class="MsoNormal"><br type="_moz">
</p>
<p class="MsoNormal">and my C++ class referencing VTK includes:</p>
<p class="MsoNormal"><br type="_moz">
</p>
<p class="MsoNormal">#include <vtkAutoInit.h><br type="_moz">
VTK_MODULE_INIT(vtkInteractionStyle);<br type="_moz">
VTK_MODULE_INIT(vtkRenderingOpenGL2);<br type="_moz">
VTK_MODULE_INIT(vtkRenderingFreeType);<br type="_moz">
<br type="_moz">
#include <vtkAbstractPolyDataReader.h><br type="_moz">
#include <vtkActor.h><br type="_moz">
#include <vtkExtractVOI.h><br type="_moz">
#include <vtkImageCast.h><br type="_moz">
#include <vtkImageData.h><br type="_moz">
#include <vtkJPEGReader.h><br type="_moz">
#include <vtkOBJReader.h><br type="_moz">
#include <vtkPNGWriter.h><br type="_moz">
#include <vtkPolyDataMapper.h><br type="_moz">
#include <vtkRenderer.h><br type="_moz">
#include <vtkRenderWindow.h><br type="_moz">
#include <vtkRenderWindowInteractor.h><br type="_moz">
#include <vtkSmartPointer.h><br type="_moz">
#include <vtkTexture.h><br type="_moz">
#include <vtkViewport.h><br type="_moz">
#include <vtkWindow.h><br type="_moz">
#include <vtkWindowToImageFilter.h><br type="_moz">
<br type="_moz">
</p>
<p class="MsoNormal"><br type="_moz">
</p>
<p class="MsoNormal">But even with all of the VTK libraries included, I still get a lot of “undefined reference”</p>
<p class="MsoNormal">errors for VTK classes/methods which are included in the VTK libraries,</p>
<p class="MsoNormal">when building (linking) my project via<br type="_moz">
</p>
<p class="MsoNormal"><br type="_moz">
</p>
<p class="MsoNormal">$ ./gradlew clean buil..<br type="_moz">
</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">I saw there <span> </span>were some old threads discussing similar Android issues,</p>
<p class="MsoNormal">but didn't see much recently as far as any solutions to using Gradle.</p>
<p class="MsoNormal">Since Google is recommending that Android developers move to</p>
<p class="MsoNormal">Android Studio and Gradle, and has been adding more NDK / native support,</p>
<p class="MsoNormal">this seems to be the preferred way of doing things, instead of using</p>
<p class="MsoNormal">.mk files or CMake</p>
<p class="MsoNormal"><br type="_moz">
</p>
<p class="MsoNormal">Any other sugestions ?</p>
<p class="MsoNormal"><br type="_moz">
</p>
<p class="MsoNormal">Brian Miller</p>
<p class="MsoNormal"><br type="_moz">
</p>
<p class="MsoNormal"> </p>
</div>
</div>
</body>
</html>