如何解决make创建静态库,但无法使用add_Library创建共享库
我正在使用单个CMake文件编译几个库并创建一个库。 CMake执行成功并创建了make文件。在addLibrary()中使用STATIC选项执行make文件,成功创建了静态库,但是无法使用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)
尝试通过在add_library()中添加SHARED创建共享库时出现以下链接错误
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$
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。