AndreasFagschlunger / O2Xfs

Java API for accessing CEN/XFS API, EMV Level 2 Kernel
47 stars 28 forks source link

initial gradle build failed "no at.o2xfs.win32 in java.library.path" #26

Closed amphibithen closed 8 years ago

amphibithen commented 8 years ago

hi, i found this project and it peaked my interest, so decided to give it look over. i am not familiar with gradle so may be a newbie mistake. when i follow "https://github.com/AndreasFagschlunger/O2Xfs/blob/gh-pages/setup.html" i run into an error on the tests, which appear to stem from a config issue. when running "./gradlew.bat build --info", i eventually fail with below.

i looked into the path "Z:\C\development\java_atm_app_test\O2Xfs\at.o2xfs.win32\build\libs\" and see no "at.o2xfs.win32.dll", only "at.o2xfs.win32.jar". then the contents of it don't really match what is listed, and i found a folder named "at.o2xfs.win32.dll", but the contents also don't match, so wasn't sure what is missing.


Starting process 'Gradle Test Executor 1'. Working directory: Z:\C\development\java_atm_app_test\O2Xfs\at.o2xfs.win32 Command: C:\Program Files\Java\jdk1.8.0_91\bin\java.exe -Djava.library.path=Z:\C\development\java_atm_app_test\O2Xfs\at.o2xfs.win32\build\libs\at.o2xfs.win32.dll\shared\release -Djava.security.manager=jarjar.org.gradle.process.internal.child.BootstrapSecurityManager -Dfile.encoding=windows-1252 -Duser.country=US -Duser.language=en -Duser.variant -ea -cp C:\Users\ATM IT\.gradle\caches\2.12\workerMain\gradle-worker.jar jarjar.org.gradle.process.internal.launcher.GradleWorkerMain 'Gradle Test Executor 1'
Successfully started process 'Gradle Test Executor 1'
Gradle Test Executor 1 started executing tests.

at.o2xfs.win32.BOOLTest > testFalse FAILED
    java.lang.UnsatisfiedLinkError: no at.o2xfs.win32 in java.library.path
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
        at java.lang.Runtime.loadLibrary0(Runtime.java:870)
        at java.lang.System.loadLibrary(System.java:1122)
        at at.o2xfs.win32.impl.Win32Buffer.<clinit>(Win32Buffer.java:40)
        at at.o2xfs.win32.impl.Win32BufferFactory.createBuffer(Win32BufferFactory.java:38)
        at at.o2xfs.win32.Type.allocate(Type.java:69)
        at at.o2xfs.win32.BOOL.<init>(BOOL.java:50)
        at at.o2xfs.win32.BOOLTest.testFalse(BOOLTest.java:45)

at.o2xfs.win32.BOOLTest > testTrue FAILED
    java.lang.NoClassDefFoundError: Could not initialize class at.o2xfs.win32.impl.Win32Buffer
        at at.o2xfs.win32.impl.Win32BufferFactory.createBuffer(Win32BufferFactory.java:38)
        at at.o2xfs.win32.Type.allocate(Type.java:69)
        at at.o2xfs.win32.BOOL.<init>(BOOL.java:50)
        at at.o2xfs.win32.BOOLTest.testTrue(BOOLTest.java:39)

at.o2xfs.win32.impl.Win32BufferTest > putAndGet FAILED
    java.lang.NoClassDefFoundError: Could not initialize class at.o2xfs.win32.impl.Win32Buffer
        at at.o2xfs.win32.impl.Win32BufferFactory.createBuffer(Win32BufferFactory.java:38)
        at at.o2xfs.win32.impl.Win32BufferTest.putAndGet(Win32BufferTest.java:46)

at.o2xfs.win32.impl.Win32BufferTest > subBuffer FAILED
    java.lang.NoClassDefFoundError: Could not initialize class at.o2xfs.win32.impl.Win32Buffer
        at at.o2xfs.win32.impl.Win32BufferFactory.createBuffer(Win32BufferFactory.java:38)
        at at.o2xfs.win32.impl.Win32BufferTest.subBuffer(Win32BufferTest.java:67)

at.o2xfs.win32.impl.Win32BufferTest > bufferOverflow FAILED
    java.lang.Exception: Unexpected exception, expected<at.o2xfs.win32.BufferOverflowException> but was<java.lang.NoClassDefFoundError>

        Caused by:
        java.lang.NoClassDefFoundError: Could not initialize class at.o2xfs.win32.impl.Win32Buffer
            at at.o2xfs.win32.impl.Win32BufferFactory.createBuffer(Win32BufferFactory.java:38)
            at at.o2xfs.win32.impl.Win32BufferTest.bufferOverflow(Win32BufferTest.java:54)

at.o2xfs.win32.ZSTRTest > helloWorld FAILED
    java.lang.NoClassDefFoundError: Could not initialize class at.o2xfs.win32.impl.Win32Buffer
        at at.o2xfs.win32.impl.Win32BufferFactory.createBuffer(Win32BufferFactory.java:38)
        at at.o2xfs.win32.Type.allocate(Type.java:69)
        at at.o2xfs.win32.ZSTR.<init>(ZSTR.java:49)
        at at.o2xfs.win32.ZSTR.<init>(ZSTR.java:54)
        at at.o2xfs.win32.ZSTRTest.helloWorld(ZSTRTest.java:38)
Gradle Test Executor 1 finished executing tests.

9 tests completed, 6 failed
AndreasFagschlunger commented 8 years ago

Hello amphibithen!

First thing, all build artifacts are located in a build-directory inside each project directory. So JAR archives should be found e.g. in \at.o2xfs.win32\build\libs where native libs should be located in subfolders like \at.o2xfs.xfs\build\libs\at.o2xfs.xfs.dll\shared.

If there are no DLLs at all, I may ask if you already installed Visual Studio? If not, you can download Visual Studio Express 2013 for Desktop. I do not recommend to install the latest 2015 edition, since gradle doesn't support it yet.

Gradle also supports other platforms, but I have only used Visual Studio so far, see the Gradle Docs for more information.

Another thing to mention, you don't have do build native code if you don't want to. Since the API is very static, there isn't great change in native code. So you can download the latest at.o2xfs.operator.zip from the Releases. section and extract the DLLs from there.

Next question, are you running a x64 edition of windows? Because if so, it seems your gradle build uses a x64 JDK since it's located under Program Files and not Program Files (x86) like it should on x64 editions of windows.

So make sure your gradle build uses a x32 JDK, you can specify the path to the JDK in a file called gradle.properties in the root directory of the O2Xfs repository. The entry should look something like this:

org.gradle.java.home=C:/Program Files (x86)/Java/jdk1.8.0_51

If you still have problems building, post the output from .\gradlew build.

Best regards, Andreas Fagschlunger

amphibithen commented 8 years ago

Thanks for the prompt response!

I was trying to follow the setup.html, which didn't really mention any of those steps. Perhaps it should be updated with all the steps so it's all inclusive. If you like I can help out with it.

I am familiar with ATMs, so am doing all of this in a win7 x32 VM (as no vendors have even attempted x64) - no worries there.

I haven't actually installed XFS on this VM though, just followed the instructions on the setup page with what to do for the various XFS versions and unpacking them (not instaling). I literally just started by following all of the instructions on the setup page. If you follow the same, I'd expect you'd run into the same problem.

I tried following the instructions on the release page (to just take the at.o2xfs.operator.zip and running start.cmd), and I get a blank JRE box (after realizing your batch file didn't support paths with spaces). Even if I got the runtime working, I'd still want the build environment to get the latest and hopefully contribute. Although I don't know exactly what you mean by the "native code", can you explain that a little?

I did not have Visual Studio installed, did not really want to either - so opted to get the code from Releases at.o2xfs.operator.zip. Extracted at.o2xfs.operator.zip\bin\ to Z:\C\development\java_atm_app_test\O2Xfs\build\libs. This did not help. I tried moving them to the bin folder instead (as the zip had them in bin), did not work. I tried unpacking all jars and dlls and put them in their respective folders (and all in libs), did not work. After testing, I tried to cleanup the bin directory, and it said bin\at.o2xfs.xfs.dll was in use. Restarted, deleted bin folder, tried again (with dlls only in libs), did not work, and had no issues deleting.

So going back to your request, the output of ./gradlew build is below. This is after loading all dlls and jars from Releases/at.o2xfs.operator.zip to build/libs.

:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:jar UP-TO-DATE
:assemble UP-TO-DATE
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test UP-TO-DATE
:check UP-TO-DATE
:build UP-TO-DATE
:at.o2xfs.common:compileJava UP-TO-DATE
:at.o2xfs.common:processResources UP-TO-DATE
:at.o2xfs.common:classes UP-TO-DATE
:at.o2xfs.common:jar UP-TO-DATE
:at.o2xfs.common:assemble UP-TO-DATE
:at.o2xfs.common:compileTestJava UP-TO-DATE
:at.o2xfs.common:processTestResources UP-TO-DATE
:at.o2xfs.common:testClasses UP-TO-DATE
:at.o2xfs.common:test UP-TO-DATE
:at.o2xfs.common:check UP-TO-DATE
:at.o2xfs.common:build UP-TO-DATE
:at.o2xfs.log:compileJava UP-TO-DATE
:at.o2xfs.log:processResources UP-TO-DATE
:at.o2xfs.log:classes UP-TO-DATE
:at.o2xfs.log:jar UP-TO-DATE
:at.o2xfs.win32:compileJava UP-TO-DATE
:at.o2xfs.win32:processResources UP-TO-DATE
:at.o2xfs.win32:classes UP-TO-DATE
:at.o2xfs.win32:jar UP-TO-DATE
:at.o2xfs.ctapi:compileJava UP-TO-DATE
:at.o2xfs.ctapi:processResources UP-TO-DATE
:at.o2xfs.ctapi:classes UP-TO-DATE
:at.o2xfs.ctapi:jar UP-TO-DATE
:at.o2xfs.ctapi:assemble
:at.o2xfs.ctapi:compileTestJava UP-TO-DATE
:at.o2xfs.ctapi:processTestResources UP-TO-DATE
:at.o2xfs.ctapi:testClasses UP-TO-DATE
:at.o2xfs.ctapi:test UP-TO-DATE
:at.o2xfs.ctapi:check UP-TO-DATE
:at.o2xfs.ctapi:build
:at.o2xfs.emv:compileJava UP-TO-DATE
:at.o2xfs.emv:processResources UP-TO-DATE
:at.o2xfs.emv:classes UP-TO-DATE
:at.o2xfs.emv:jar UP-TO-DATE
:at.o2xfs.emv:assemble UP-TO-DATE
:at.o2xfs.emv:compileTestJava UP-TO-DATE
:at.o2xfs.emv:processTestResources UP-TO-DATE
:at.o2xfs.emv:testClasses UP-TO-DATE
:at.o2xfs.emv:test UP-TO-DATE
:at.o2xfs.emv:check UP-TO-DATE
:at.o2xfs.emv:build UP-TO-DATE
:at.o2xfs.emv.demo:compileJava UP-TO-DATE
:at.o2xfs.emv.demo:processResources UP-TO-DATE
:at.o2xfs.emv.demo:classes UP-TO-DATE
:at.o2xfs.emv.demo:jar UP-TO-DATE
:at.o2xfs.emv.demo:assemble UP-TO-DATE
:at.o2xfs.emv.demo:compileTestJava UP-TO-DATE
:at.o2xfs.emv.demo:processTestResources UP-TO-DATE
:at.o2xfs.emv.demo:testClasses UP-TO-DATE
:at.o2xfs.emv.demo:test UP-TO-DATE
:at.o2xfs.emv.demo:check UP-TO-DATE
:at.o2xfs.emv.demo:build UP-TO-DATE
:at.o2xfs.xfs:compileJava UP-TO-DATE
:at.o2xfs.xfs:processResources UP-TO-DATE
:at.o2xfs.xfs:classes UP-TO-DATE
:at.o2xfs.xfs:jar UP-TO-DATE
:o2xfs-xfs3:compileJava UP-TO-DATE
:o2xfs-xfs3:processResources UP-TO-DATE
:o2xfs-xfs3:classes UP-TO-DATE
:o2xfs-xfs3:jar UP-TO-DATE
:at.o2xfs.xfs.service:compileJava UP-TO-DATE
:at.o2xfs.xfs.service:processResources UP-TO-DATE
:at.o2xfs.xfs.service:classes UP-TO-DATE
:at.o2xfs.xfs.service:jar UP-TO-DATE
:at.o2xfs.emv.pinpad.impl.xfs:compileJava UP-TO-DATE
:at.o2xfs.emv.pinpad.impl.xfs:processResources UP-TO-DATE
:at.o2xfs.emv.pinpad.impl.xfs:classes UP-TO-DATE
:at.o2xfs.emv.pinpad.impl.xfs:jar UP-TO-DATE
:at.o2xfs.emv.pinpad.impl.xfs:assemble UP-TO-DATE
:at.o2xfs.emv.pinpad.impl.xfs:compileTestJava UP-TO-DATE
:at.o2xfs.emv.pinpad.impl.xfs:processTestResources UP-TO-DATE
:at.o2xfs.emv.pinpad.impl.xfs:testClasses UP-TO-DATE
:at.o2xfs.emv.pinpad.impl.xfs:test UP-TO-DATE
:at.o2xfs.emv.pinpad.impl.xfs:check UP-TO-DATE
:at.o2xfs.emv.pinpad.impl.xfs:build UP-TO-DATE
:at.o2xfs.log:assemble UP-TO-DATE
:at.o2xfs.log:compileTestJava UP-TO-DATE
:at.o2xfs.log:processTestResources UP-TO-DATE
:at.o2xfs.log:testClasses UP-TO-DATE
:at.o2xfs.log:test UP-TO-DATE
:at.o2xfs.log:check UP-TO-DATE
:at.o2xfs.log:build UP-TO-DATE
:at.o2xfs.operator:compileJava UP-TO-DATE
:at.o2xfs.operator:processResources UP-TO-DATE
:at.o2xfs.operator:classes UP-TO-DATE
:at.o2xfs.operator:jar UP-TO-DATE
:at.o2xfs.operator:assemble UP-TO-DATE
:at.o2xfs.operator:compileTestJava UP-TO-DATE
:at.o2xfs.operator:processTestResources UP-TO-DATE
:at.o2xfs.operator:testClasses UP-TO-DATE
:at.o2xfs.operator:test UP-TO-DATE
:at.o2xfs.operator:check UP-TO-DATE
:at.o2xfs.operator:build UP-TO-DATE
:at.o2xfs.win32:assemble
:at.o2xfs.win32:compileTestJava UP-TO-DATE
:at.o2xfs.win32:processTestResources UP-TO-DATE
:at.o2xfs.win32:testClasses UP-TO-DATE
:at.o2xfs.win32:test

at.o2xfs.win32.BOOLTest > testFalse FAILED
    java.lang.UnsatisfiedLinkError at BOOLTest.java:45

at.o2xfs.win32.BOOLTest > testTrue FAILED
    java.lang.NoClassDefFoundError at BOOLTest.java:39

at.o2xfs.win32.impl.Win32BufferTest > putAndGet FAILED
    java.lang.NoClassDefFoundError at Win32BufferTest.java:46

at.o2xfs.win32.impl.Win32BufferTest > subBuffer FAILED
    java.lang.NoClassDefFoundError at Win32BufferTest.java:67

at.o2xfs.win32.impl.Win32BufferTest > bufferOverflow FAILED
    java.lang.Exception
        Caused by: java.lang.NoClassDefFoundError at Win32BufferTest.java:54

at.o2xfs.win32.ZSTRTest > helloWorld FAILED
    java.lang.NoClassDefFoundError at ZSTRTest.java:38
:at.o2xfs.win32:test FAILED

BUILD FAILED

Total time: 21.617 secs
AndreasFagschlunger commented 8 years ago

Ok, it seems the Java build runs but your native build (*.dll, etc.). doesn't. Since most of the Unit tests require the DLLs to run, you get all those nasty NoClassDefFoundError's. You can always build using gradle but without running test by starting gradle like following:

.\gradlew build -x test

But in order for proper environment, you should really install a free Version from Visual Studio. Visual Studio comes with the C/C++ compiler, the Windows Header files and gradle supports it out of the box. Of course you could download only the Windows SDK, and use gcc compiler instead, but I can't help you with that. Since XFS is based on the Win32-API, you have to use Windows components in one way or another.

If you have installed Visual Studio on your development machine, you can check gradle by switching to a directory containing native build artifacts and call gradle components:

\O2Xfs> cd .\at.o2xfs.win32\
\O2Xfs\at.o2xfs.win32> ..\gradlew components

This should output something like the following:

------------------------------------------------------------

Native library 'at.o2xfs.win32.dll'
-----------------------------------

Source sets
    C++ source 'at.o2xfs.win32.dll:cpp'
        srcDir: src\at.o2xfs.win32.dll\cpp
    Windows resources 'at.o2xfs.win32.dll:rc'
        srcDir: src\at.o2xfs.win32.dll\rc

Binaries
    Shared library 'at.o2xfs.win32.dll:debug:sharedLibrary'
        build using task: :at.o2xfs.win32:at.o2xfs.win32.dllDebugSharedLibrary
        build type: build type 'debug'
        flavor: flavor 'default'
        target platform: platform 'windows_x86'
        tool chain: Tool chain 'visualCpp' (Visual Studio)
        ...

The question about the platform used (x86, x64) was regarding your development machine, were you write your code on. This machine, where the gradle build runs, must have a x86 version of JDK installed in order to run the unit tests. The XFS-API is based on x86 and doesn't support x64 by now and so at.o2xfs.win32 doesn't work on x64 either (by now).

So another thing, you actually can develop without compiling DLLs. The native runtime (*.dll) needed to run O²Xfs based applications is found as mentioned in the latest O²Xfs Operator release. You can implement new XFS services (CIM, CDM, etc.) without the need for a single line of new native (C, C++, etc.) code.

You already have to test XFS code on a machine which actually has a XFS Manager installed and has real hardware - or you're one lucky guy who has access to a XFS Simulator. But they all cost a lot of money.

The unit tests so far in o2xfs-xfs3 are helpful, but the don't actually access XFS. The only access Win32 to check if the conversion from Win32 (native) back to Java and vice versa works.

So we can work on without talking about native code generation. What would be the first thing you want to do? Were you able to launch O²Xfs Operator on an ATM of yours? This would show you what's already there and that it is actually working.

One last thing, if a Java class load a native library (.dll on Windows, .so on Linux) with a call to System.loadLibrary like e.g. Win32Buffer, it will search for the library (name + .dll) in the current working directory and it searches the java.library.path.

For example, you can edit the java.library.path for eclipse in the project properties under Java Build Path. In the Source tab expand the listed source folders and there you should find an entry Native library location. Currently those paths point to the gradle build directory, like for at.o2xfs.win32 it points to at.o2xfs.win32/build/libs/at.o2xfs.win32.dll/shared/release.

You can copy the DLLs from O²Xfs Operator and copy them to any location you want. You edit the native library location in eclipse for the necessary projects (at.o2xfs.win32, at.o2xfs.xfs) and you can start XFS applications. But it's likely the fail soon since you may have no XFS Manager installed.

The java.library.path is also actually a System property. So you can specify the path with an argument -Djava.library.path like in start.cmd.

amphibithen commented 8 years ago

I do have xfs simulator, but didn't load it on the VM I tested. I just loaded O2XFS on an ATM, and it is working (more or less), but since release is a bit old some of the functionality doesn't work (I found the sections of code it wasn't yet implemented in, so fine with that).

So the one thing I can't do now is a full build, but I can run it on ATM (or VM with XFS Simulator).

I loaded Visual Studio 2013 Express, re-ran ./gradlew.bat build and this time failed at new place (just a couple steps later).

...
:at.o2xfs.win32:assemble
:at.o2xfs.win32:compileTestJava UP-TO-DATE
:at.o2xfs.win32:processTestResources UP-TO-DATE
:at.o2xfs.win32:testClasses UP-TO-DATE
:at.o2xfs.win32:test
:at.o2xfs.win32:check
:at.o2xfs.win32:build
:at.o2xfs.xfs:compileAt.o2xfs.xfs.conf.dllSharedLibraryAt.o2xfs.xfs.conf.dllCppat.o2xfs.xfs.conf.cpp
**Z:\C\development\java_atm_app_test\O2Xfs\at.o2xfs.xfs\src\at.o2xfs.xfs.conf.dll\cpp\at.o2xfs.xfs.conf.cpp(30) : fatal error C1083: Cannot open include file: 'xfsconf.h': No such file or directory**

 FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':at.o2xfs.xfs:compileAt.o2xfs.xfs.conf.dllSharedLibraryAt.o2xfs.xfs.conf.dllCpp'.
> A build operation failed.
      C++ compiler failed while compiling at.o2xfs.xfs.conf.cpp.
  See the complete log at: file:///Z:/C/development/java_atm_app_test/O2Xfs/at.o2xfs.xfs/build/tmp/compileAt.o2xfs.xfs.conf.dllSharedLibraryAt.o2xfs.xfs.conf.dllCpp/output.txt

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 28.02 secs

Ran gradlew components:

$ ../gradlew components
:at.o2xfs.win32:components

------------------------------------------------------------
Project :at.o2xfs.win32
------------------------------------------------------------

Native library 'at.o2xfs.win32.dll'
-----------------------------------

Source sets
    C++ source 'at.o2xfs.win32.dll:cpp'
        srcDir: src\at.o2xfs.win32.dll\cpp
    Windows resources 'at.o2xfs.win32.dll:rc'
        srcDir: src\at.o2xfs.win32.dll\rc

Binaries
    Shared library 'at.o2xfs.win32.dll:debug:sharedLibrary'
        build using task: :at.o2xfs.win32:at.o2xfs.win32.dllDebugSharedLibrary
        build type: build type 'debug'
        flavor: flavor 'default'
        target platform: platform 'windows_x86'
        tool chain: Tool chain 'visualCpp' (Visual Studio)
        shared library file: build\libs\at.o2xfs.win32.dll\shared\debug\at.o2xfs.win32.dll
    Static library 'at.o2xfs.win32.dll:debug:staticLibrary'
        build using task: :at.o2xfs.win32:at.o2xfs.win32.dllDebugStaticLibrary
        build type: build type 'debug'
        flavor: flavor 'default'
        target platform: platform 'windows_x86'
        tool chain: Tool chain 'visualCpp' (Visual Studio)
        static library file: build\libs\at.o2xfs.win32.dll\static\debug\at.o2xfs.win32.lib
    Shared library 'at.o2xfs.win32.dll:release:sharedLibrary'
        build using task: :at.o2xfs.win32:at.o2xfs.win32.dllReleaseSharedLibrary
        build type: build type 'release'
        flavor: flavor 'default'
        target platform: platform 'windows_x86'
        tool chain: Tool chain 'visualCpp' (Visual Studio)
        shared library file: build\libs\at.o2xfs.win32.dll\shared\release\at.o2xfs.win32.dll
    Static library 'at.o2xfs.win32.dll:release:staticLibrary'
        build using task: :at.o2xfs.win32:at.o2xfs.win32.dllReleaseStaticLibrary
        build type: build type 'release'
        flavor: flavor 'default'
        target platform: platform 'windows_x86'
        tool chain: Tool chain 'visualCpp' (Visual Studio)
        static library file: build\libs\at.o2xfs.win32.dll\static\release\at.o2xfs.win32.lib

Additional source sets
----------------------
Java source 'main:java'
    srcDir: src\main\java
    limit to: **/*.java
Java source 'test:java'
    srcDir: src\test\java
    limit to: **/*.java
JVM resources 'main:resources'
    srcDir: src\main\resources
JVM resources 'test:resources'
    srcDir: src\test\resources

Additional binaries
-------------------
Classes 'main'
    build using task: :at.o2xfs.win32:classes
    target platform: Java SE 8
    tool chain: JDK 8 (1.8)
    classes dir: build\classes\main
    resources dir: build\resources\main
Classes 'test'
    build using task: :at.o2xfs.win32:testClasses
    target platform: Java SE 8
    tool chain: JDK 8 (1.8)
    classes dir: build\classes\test
    resources dir: build\resources\test

Note: currently not all plugins register their components, so some components may not be visible here.

BUILD SUCCESSFUL

Total time: 6.49 secs
AndreasFagschlunger commented 8 years ago

Hi @amphibithen!

This one is easy, although you have four XFS SDKs for the unit tests, there is still the core API which per default searches for the XFS SDK in C:/Program Files (x86)/Common Files/XFS, the default location of the latest SDK installer.

Add a `xfsSdkDir property in your gradle.properties file to overwrite the default path. It doesn't matter to which XFS SDK the path points (a 2.x version would work), but you may set the path to a XFS SDK already extracted, for example

xfsSdkDir=C:/XFS SDKs/SDK303/Common/XFS/SDK

if you used the directories used in the Setup guide.

Best regards, Andreas Fagschlunger

amphibithen commented 8 years ago

Ah, I had it in there...but didn't put the right path (I pointed to the C:/XFS SDKs/SDK320). Unfortunately that path doesn't really exist in 3.20, but when I point it towards the .../XFS/SDK folder, or towards 3.03 at C:/XFS SDKs/SDK303/Common/XFS/SDK, I receive below error.

:at.o2xfs.xfs:compileAt.o2xfs.xfs.dllStaticLibraryAt.o2xfs.xfs.dllCpp UP-TO-DATE
:at.o2xfs.xfs:compileAt.o2xfs.xfs.dllStaticLibraryAt.o2xfs.xfs.dllRc UP-TO-DATE
:at.o2xfs.xfs:createAt.o2xfs.xfs.dllStaticLibrary UP-TO-DATE
:at.o2xfs.xfs:at.o2xfs.xfs.dllStaticLibrary UP-TO-DATE
:at.o2xfs.xfs:compileAt.o2xfs.xfs.test.dllSharedLibraryAt.o2xfs.xfs.test.dllCppCamStructV3_20.cpp
Z:\C\development\java_atm_app_test\O2Xfs\at.o2xfs.xfs\src\at.o2xfs.xfs.test.dll\cpp\CamStructV3_20.cpp(9) : error C2146: syntax error : missing ';' before identifier 'takePictEx'
Z:\C\development\java_atm_app_test\O2Xfs\at.o2xfs.xfs\src\at.o2xfs.xfs.test.dll\cpp\CamStructV3_20.cpp(9) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Z:\C\development\java_atm_app_test\O2Xfs\at.o2xfs.xfs\src\at.o2xfs.xfs.test.dll\cpp\CamStructV3_20.cpp(34) : error C2039: 'wAntiFraudModule' : is not a member of '_wfs_cam_status'
        C:\XFS SDKs\SDK303\Common\XFS\SDK\INCLUDE\XFSCAM.H(119) : see declaration of '_wfs_cam_status'
Z:\C\development\java_atm_app_test\O2Xfs\at.o2xfs.xfs\src\at.o2xfs.xfs.test.dll\cpp\CamStructV3_20.cpp(34) : error C2065: 'WFS_CAM_AFMOK' : undeclared identifier
Z:\C\development\java_atm_app_test\O2Xfs\at.o2xfs.xfs\src\at.o2xfs.xfs.test.dll\cpp\CamStructV3_20.cpp(51) : error C2039: 'bPictureFile' : is not a member of '_wfs_cam_caps'
        C:\XFS SDKs\SDK303\Common\XFS\SDK\INCLUDE\XFSCAM.H(128) : see declaration of '_wfs_cam_caps'
Z:\C\development\java_atm_app_test\O2Xfs\at.o2xfs.xfs\src\at.o2xfs.xfs.test.dll\cpp\CamStructV3_20.cpp(52) : error C2039: 'bAntiFraudModule' : is not a member of '_wfs_cam_caps'
        C:\XFS SDKs\SDK303\Common\XFS\SDK\INCLUDE\XFSCAM.H(128) : see declaration of '_wfs_cam_caps'
Z:\C\development\java_atm_app_test\O2Xfs\at.o2xfs.xfs\src\at.o2xfs.xfs.test.dll\cpp\CamStructV3_20.cpp(57) : error C2228: left of '.wCamera' must have class/struct/union
        type is 'int'
Z:\C\development\java_atm_app_test\O2Xfs\at.o2xfs.xfs\src\at.o2xfs.xfs.test.dll\cpp\CamStructV3_20.cpp(58) : error C2228: left of '.lpszCamData' must have class/struct/union
        type is 'int'
Z:\C\development\java_atm_app_test\O2Xfs\at.o2xfs.xfs\src\at.o2xfs.xfs.test.dll\cpp\CamStructV3_20.cpp(59) : error C2228: left of '.lpszUNICODECamData' must have class/struct/union
        type is 'int'
Z:\C\development\java_atm_app_test\O2Xfs\at.o2xfs.xfs\src\at.o2xfs.xfs.test.dll\cpp\CamStructV3_20.cpp(60) : error C2228: left of '.lpszPictureFile' must have class/struct/union
        type is 'int'

 FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':at.o2xfs.xfs:compileAt.o2xfs.xfs.test.dllSharedLibraryAt.o2xfs.xfs.test.dllCpp'.
> A build operation failed.
      C++ compiler failed while compiling CamStructV3_20.cpp.
  See the complete log at: file:///Z:/C/development/java_atm_app_test/O2Xfs/at.o2xfs.xfs/build/tmp/compileAt.o2xfs.xfs.test.dllSharedLibraryAt.o2xfs.xfs.test.dllCpp/output.txt

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 19.281 secs
amphibithen commented 8 years ago

also thought I'd mention, above error is from pointing towards 3.03 path, but I get different error when pointing towards 3.20 path.

:at.o2xfs.xfs:at.o2xfs.xfs.dllStaticLibrary
:at.o2xfs.xfs:compileAt.o2xfs.xfs.test.dllSharedLibraryAt.o2xfs.xfs.test.dllCppCamStructV3_20.cpp
C:\XFS SDKs\SDK320\XFS\SDK\INCLUDE\XFSCAM.H(178) : fatal error C1071: unexpected end of file found in comment

 FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':at.o2xfs.xfs:compileAt.o2xfs.xfs.test.dllSharedLibraryAt.o2xfs.xfs.test.dllCpp'.
> A build operation failed.
      C++ compiler failed while compiling CamStructV3_20.cpp.
  See the complete log at: file:///Z:/C/development/java_atm_app_test/O2Xfs/at.o2xfs.xfs/build/tmp/compileAt.o2xfs.xfs.test.dllSharedLibraryAt.o2xfs.xfs.test.dllCpp/output.txt

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 30.186 secs
AndreasFagschlunger commented 8 years ago

Indeed there is a problem. The CAM classes are somewhat outdated, so I disabled the CamStructV3_20Test test.

But the DLL is still present in build.gradle, so for the moment remove the whole block in at.o2xfs.xfs/build.gradle:

        'at.o2xfs.xfs.test.dll'(NativeLibrarySpec) {
            binaries.all {
                lib project: ':at.o2xfs.win32', library: 'at.o2xfs.win32.dll'
                lib library: 'jni', linkage: 'api'
                lib library: 'msxfs', linkage: 'static'
                rcCompiler.args "/v"
                rcCompiler.define "FILE_VERSION=\"0.0\""
                rcCompiler.define "COMMA_VERSION=0,0,0,0"
                rcCompiler.define "ORG_FILENAME="
            }
        } 
amphibithen commented 8 years ago

thanks, it is now building. i will make some pull requests to resolve build.