make создает статическую библиотеку, но не может создать общую библиотеку с помощью add_Library()
Я собираю несколько библиотек, используя один файл CMake и создаю единую библиотеку. Выполнение CMake прошло успешно, и файл make создан. Выполнение make-файла с опцией STATIC в addLibrary(), успешное создание статической библиотеки, но неспособность создать динамическую библиотеку с опцией SHARED.
CMakeList.txt
cmake_minimum_required(VERSION 3.5)
# set the project name
project(snncore VERSION 1.0)
# Find requirements
# specify the C++ standard
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED True)
option(BUILD_SHARED_LIBS "Build using shared libraries" ON)
# Define CMake variables here
set(LIB_DIR ${PROJECT_SOURCE_DIR}/lib)
set(CFLAGS "-Wall -g -std=c99 -Iinclude")
# Add path of header files
include_directories(${CMAKE_SOURCE_DIR}lib/ChecksumTestFile
${CMAKE_SOURCE_DIR}/lib/ConfigDataHandler
${CMAKE_SOURCE_DIR}/lib/FileParse
${CMAKE_SOURCE_DIR}/lib/FileUtils2
${CMAKE_SOURCE_DIR}/lib/StringUtils
${CMAKE_SOURCE_DIR}/lib/ZipStream
${CMAKE_SOURCE_DIR}/lib/Stack
${CMAKE_SOURCE_DIR}/lib/PipeRedirect
${CMAKE_SOURCE_DIR}/lib/MRCASException
${CMAKE_SOURCE_DIR}/lib/LogClient
${CMAKE_SOURCE_DIR}/lib/log-server
${CMAKE_SOURCE_DIR}/lib/PortHacks)
add_library(snncore SHARED ${LIB_DIR}/FileUtils2/DirectoryCopier.cpp
${LIB_DIR}/FileUtils2/DirectoryCopier.hpp
${LIB_DIR}/FileUtils2/DirectoryInfo.cpp
${LIB_DIR}/FileUtils2/DirectoryInfo.hpp
${LIB_DIR}/FileUtils2/FileUtils2.cpp
${LIB_DIR}/FileUtils2/FileUtils2.hpp
${LIB_DIR}/FileUtils2/ReplaceString.cpp
${LIB_DIR}/FileUtils2/ReplaceString.hpp
${LIB_DIR}/StringUtils/StringUtils.c
${LIB_DIR}/StringUtils/StringUtils.h
${LIB_DIR}/StringUtils/tester.c
${LIB_DIR}/StringUtils/threadtest.c
${LIB_DIR}/StringUtils/tokentest.c
${LIB_DIR}/StringUtils/wraptest.c
${LIB_DIR}/MRCASException/MRCASException.C
${LIB_DIR}/MRCASException/test.C
${LIB_DIR}/FileParse/fileparse.c
${LIB_DIR}/FileParse/cfgchk.c
${LIB_DIR}/FileParse/parsetest.c
${LIB_DIR}/FileParse/parsetest2.c
${LIB_DIR}/FileParse/fileparse.h
${LIB_DIR}/ChecksumTestFile/checksum_test_file.c
${LIB_DIR}/ChecksumTestFile/test.c
${LIB_DIR}/ChecksumTestFile/checksum_test_file.h
${LIB_DIR}/ConfigDataHandler/ConfigDataHandler.C
${LIB_DIR}/ConfigDataHandler/ConfigDataHandler_Data.C
${LIB_DIR}/ConfigDataHandler/ConfigDataHandler_Debug.C
${LIB_DIR}/ConfigDataHandler/ConfigDataHandler_SECTION.C
${LIB_DIR}/ConfigDataHandler/ConfigException.C
${LIB_DIR}/ConfigDataHandler/ConfigParser.C
${LIB_DIR}/ConfigDataHandler/MRCASConfigHandler.C
${LIB_DIR}/ConfigDataHandler/MRCASParser.C
${LIB_DIR}/ConfigDataHandler/MRCASConfigHandler.hh
${LIB_DIR}/ConfigDataHandler/ConfigDataHandler.hh
${LIB_DIR}/LogClient/LogClient.C
${LIB_DIR}/LogClient/LogClient.hh
${LIB_DIR}/PipeRedirect/PipeRedirect.c
${LIB_DIR}/PipeRedirect/tester.c
${LIB_DIR}/PipeRedirect/PipeRedirect.h
${LIB_DIR}/ZipStream/ZipStream.cpp
${LIB_DIR}/ZipStream/ZipStream.hh
${LIB_DIR}/log-server/log-server.C
${LIB_DIR}/Stack/mrstack.c
${LIB_DIR}/Stack/include/mrstack.h
${LIB_DIR}/PortHacks/fn_alphasort.c
${LIB_DIR}/PortHacks/fn_basename.c
${LIB_DIR}/PortHacks/fn_dirname.c
${LIB_DIR}/PortHacks/fn_gtod_timer.c
${LIB_DIR}/PortHacks/fn_gtod_tod.c
${LIB_DIR}/PortHacks/fn_localtime_r.c
${LIB_DIR}/PortHacks/fn_mkstemp.c
${LIB_DIR}/PortHacks/fn_realpath.c
${LIB_DIR}/PortHacks/fn_scandir.c
${LIB_DIR}/PortHacks/fn_setenv.c
${LIB_DIR}/PortHacks/tester.c)
Ниже ошибка связывания при попытке создать общую библиотеку путем добавления SHARED в add_library()
rios-bandu@ubuntu:~/git_sandbox/riOS/snncore/build$ make
[ 2%] Linking CXX shared library libsnncore.so
/usr/bin/ld: CMakeFiles/snncore.dir/lib/StringUtils/threadtest.c.o: in function `main':
threadtest.c:(.text+0x2b5): multiple definition of `main'; CMakeFiles/snncore.dir/lib/StringUtils/tester.c.o:tester.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/snncore.dir/lib/StringUtils/tokentest.c.o: in function `main':
tokentest.c:(.text+0x0): multiple definition of `main'; CMakeFiles/snncore.dir/lib/StringUtils/tester.c.o:tester.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/snncore.dir/lib/StringUtils/wraptest.c.o: in function `main':
wraptest.c:(.text+0x0): multiple definition of `main'; CMakeFiles/snncore.dir/lib/StringUtils/tester.c.o:tester.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/snncore.dir/lib/MRCASException/test.C.o: in function `main':
test.C:(.text+0x2507): multiple definition of `main'; CMakeFiles/snncore.dir/lib/StringUtils/tester.c.o:tester.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/snncore.dir/lib/FileParse/cfgchk.c.o: in function `main':
cfgchk.c:(.text+0x0): multiple definition of `main'; CMakeFiles/snncore.dir/lib/StringUtils/tester.c.o:tester.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/snncore.dir/lib/FileParse/parsetest.c.o: in function `main':
parsetest.c:(.text+0x1ac): multiple definition of `main'; CMakeFiles/snncore.dir/lib/StringUtils/tester.c.o:tester.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/snncore.dir/lib/FileParse/parsetest2.c.o: in function `main':
parsetest2.c:(.text+0x0): multiple definition of `main'; CMakeFiles/snncore.dir/lib/StringUtils/tester.c.o:tester.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/snncore.dir/lib/ChecksumTestFile/test.c.o: in function `main':
test.c:(.text+0x0): multiple definition of `main'; CMakeFiles/snncore.dir/lib/StringUtils/tester.c.o:tester.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/snncore.dir/lib/PipeRedirect/tester.c.o: in function `main':
tester.c:(.text+0x376): multiple definition of `main'; CMakeFiles/snncore.dir/lib/StringUtils/tester.c.o:tester.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/snncore.dir/lib/log-server/log-server.C.o: in function `main':
log-server.C:(.text+0x0): multiple definition of `main'; CMakeFiles/snncore.dir/lib/StringUtils/tester.c.o:tester.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/snncore.dir/lib/PortHacks/tester.c.o: in function `main':
tester.c:(.text+0x555): multiple definition of `main'; CMakeFiles/snncore.dir/lib/StringUtils/tester.c.o:tester.c:(.text+0x0): first defined here
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/snncore.dir/build.make:699: libsnncore.so] Error 1
make[1]: *** [CMakeFiles/Makefile2:76: CMakeFiles/snncore.dir/all] Error 2
make: *** [Makefile:84: all] Error 2
rios-bandu@ubuntu:~/git_sandbox/riOS/snncore/build$