On Aug 6, 2009, at 06:02 , Mathieu Malaterre wrote:

On Wed, Aug 5, 2009 at 6:55 PM, Stephen Roderick<kiwi....@mac.com> wrote:
The existing UseSWIG.cmake file creates a MODULE and not a SHARED library. The module is unuseable by any program trying to load dynamic libraries (eg wrapped Java). The attached patch fixes this problem for our situations.
Demonstrated on both Mac OS X Leopard and Ubuntu Jaunty.

Is this a known issue? I searched what I could of the list and the 'net, and
couldn't find anything on this.

No, you are confusing the C++ library and the Java binding. Instead:

ADD_LIBRARY(foo SHARED ${foo_SRCS}) # the actual shared lib
SWIG_ADD_MODULE(foojni java foo.i)
SWIG_LINK_LIBRARIES(foojni foo
 ${JNI_LIBRARIES}
)

The next time you will want to create -say- a python module you'll
simply link to your *shared C++* library:

SWIG_ADD_MODULE(foopython python foo.i)
SWIG_LINK_LIBRARIES(foopython foo
 ${PYTHON_LIBRARIES}
)

Unfortunately, that is what we currently have.

<code>
  ADD_LIBRARY(MyInterfaceCpp ...)

  Find_Package(SWIG REQUIRED)
  Find_Package(JNI REQUIRED)
  INCLUDE(UseSWIG)
  INCLUDE_DIRECTORIES(${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH2})

  SET_SOURCE_FILES_PROPERTIES(MyInterface.i PROPERTIES CPLUSPLUS 1)
  # compile swig with package flag
  SET(CMAKE_SWIG_FLAGS -package x.y.z)

  SWIG_ADD_MODULE(MyInterface java MyInterface.i)
  SWIG_LINK_LIBRARIES(MyInterface
        MyInterfaceCpp ...)
</code>

The failure comes when you try to load the SWIG-output, JNI library from within java, using something like
<code>
        static {
                System.loadLibrary("MyInterface");
        }
</code>

With a module in a "MyInterface.so" file (what SWIG currently outputs), the above call fails on both Mac OS X and Linux. They both need a correctly named dynamic library, hence the patch.

After searching some more I did find a previous post of this on the CMake ML, and the solution there is basically the same as mine (except the user copied the SWIG macro into their own CMakeLists.txt and then made the same changes). If that poster and myself are not doing anything wrong, then UseSWIG.cmake needs to be modified to support both naming styles. Else others will just hit this again in the future.

http://www.cmake.org/pipermail/cmake/2008-October/024727.html

TIA
Stephen
_______________________________________________
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