Попытка связать статические в общей библиотеке - получил неопределенную ссылку - PullRequest
0 голосов
/ 04 февраля 2019

Моя цель - использовать API из статической библиотеки в источнике разделяемой библиотеки, используя cmake 3.4.

Очень простой код для статической библиотеки

// Header
class Structure 
{
public:
    int sum( int a, int b );
    int mul( int a, int b ) { return a * b; }
};
// Source
#include "Include/Structure.hpp"

int Structure::sum( int a, int b ) { 
    return a + b;
}

.. и использование в источникеобщего класса

Structure* s = new Structure();
s->sum(3, 4);
s->mul(3, 4);

Cmake-файл для статической библиотеки:

project(MyStaticLibrary)
include_directories(Include)
file(GLOB SOURCES "*.cpp")
add_library(${CMAKE_PROJECT_NAME} STATIC ${SOURCES})
set_target_properties( ${CMAKE_PROJECT_NAME} PROPERTIES COMPILE_FLAGS "-fPIC")

Cmake-файл для общей библиотеки:

include_directories( ${static_lib_src_DIR}/Include )
add_subdirectory( ${static_lib_src_DIR} ${static_lib_build_DIR} )
add_library( MyStaticLibrary STATIC ${static_lib_src_DIR})
set_target_properties( MyStaticLibrary PROPERTIES LINKER_LANGUAGE CXX)
set_target_properties( MyStaticLibrary PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/...../libMyStaticLibrary.a )

add_library( native-lib SHARED native-lib.cpp)
add_dependencies(native-lib MyStaticLibrary)
target_link_libraries( native-lib MyStaticLibrary )

Сообщение об ошибке при связывании общей библиотеки: не определеноссылка на «Structure :: sum (int, int)»

...