[CMake] CMake + SWIG => Java JNI problems
Chris Hamons
chris.hamons at gmail.com
Mon Mar 22 00:20:53 EDT 2010
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
More information about the CMake
mailing list