Hello everyone,
                I'm having trouble mixing cmake and swig to make a
java JNI module. It looks roughly:

        IF(DEFINED SWIG_JAVA)
                FIND_PACKAGE(JNI REQUIRED)
                include_directories(${JNI_INCLUDE_DIRS})
                SET(CMAKE_SWIG_OUTDIR ${ROOT_DIR}/swig/generated/java/libtcod)
                SWIG_ADD_MODULE(libtcod-java java libtcod.i)
                SWIG_LINK_LIBRARIES(libtcod-java ${JNI_LIBRARIES} 
${LIBTCOD_NAME})
        ENDIF()

With  ${LIBTCOD_NAME} being the name of the library this JNI is trying
to wrap (libtcod-VS.dll).

It builds fine, and my entire build produces:
libtcod-VS.dll (the main library)
libtcod-java.dll (the swig generated library)
A bunch of .java files files I build into a .jar

The problem is when I try to load it in java, I get
UnsatisfiedLinkError errors. The error is related to symbols exported
from libtcod-VS.dll. It seems that java JNI wants both the SWIG
symbols and the base library symbols in the same library.

What I can't seem to do is to do that. I've tried adding the cpp files
for the library into the SWIG_ADD_MODULE list to build into
libtcod-java.dll, however that won't link. The base library uses this
line:

        set_property(TARGET ${LIBTCOD_NAME} PROPERTY COMPILE_DEFINITIONS
LIBTCOD_EXPORTS)

to setup the headers correctly for linking. However, since the swig
project name is abstracted via SWIG_ADD_MODULE and
SWIG_LINK_LIBRARIES, I don't know how I can set this.

Any suggestions? My {python,ruby,csharp,lua} wrappers don't have this
problem, since they seem perfectly happy to have my swig symbols in a
different file as the base symbols.

Thanks,
Chris Hamons
_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to