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$ 
               

0 ответов

Другие вопросы по тегам