[CMake] Compile shared library and call it's functions

Ivan ivan at sleepyiora.pw
Mon Mar 7 15:29:06 EST 2016


Hello!
I hope someone could finally help me. I spent about two days to find solution for my problem, but with no luck.

Here is my problem:

I want to create a shared library (dll on Windows, .so on Linux, .dylib on OS X) that contains some functions. This library should export only these functions and nothing else. I guarantee that these function are pure C functions, so no C++ STL is needed to call them.

Then I want to create an application that call functions from the shared library mentioned above. I mean that the application should not have these functions inside. I want OS linker to link the application with the library at runtime, when it initializes the application. I know, how to do this on Windows with Visual Studio: create DLL project, write functions and compile, then there will be two files: .dll and .lib, link the .lib file with the application and at runtime Windows will find the .dll. But how can I do so with CMake?

Here is my CMakeLists.txt:

cmake_minimum_required(VERSION 3.3)
project(untitled19)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(LIBRARY_SRC library.cpp)

add_library(libra SHARED ${LIBRARY_SRC})

set(SOURCE_FILES main.cpp)
add_executable(untitled19 ${SOURCE_FILES})
target_link_libraries(untitled19 libra)

This works and both library and executable are compiled. Unfortunately library seems to be linked into the executable: ‘nm’ command shows that the executable itself exports needed functions!
I think there should be a solution for this, but I cannot find it. Can anyone help me?
For more clarification: I’m using OS X El Capitan.
——
Best regards, Ivan.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20160307/bab14c76/attachment.html>


More information about the CMake mailing list