Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用多个库创建CMake可执行文件_Linux_Cmake_Static Libraries_Static Linking - Fatal编程技术网

Linux 使用多个库创建CMake可执行文件

Linux 使用多个库创建CMake可执行文件,linux,cmake,static-libraries,static-linking,Linux,Cmake,Static Libraries,Static Linking,我已经成功地使用CMake从源文件创建了静态库。现在我需要使用这些库创建许多可执行文件。我已经阅读了CMake示例,并试图复制它们列出的内容,但似乎不起作用。我收到错误信息: 链接CXX可执行文件.././build/bin/discoveryService armv5l-timesys-linux-uclibcgnueabi-g++:cmakfiles/discoveryService.dir/discoveryService.cpp.o:链接器输入文件未使用,因为链接未完成 下面是我的目录结

我已经成功地使用CMake从源文件创建了静态库。现在我需要使用这些库创建许多可执行文件。我已经阅读了CMake示例,并试图复制它们列出的内容,但似乎不起作用。我收到错误信息:

链接CXX可执行文件.././build/bin/discoveryService armv5l-timesys-linux-uclibcgnueabi-g++:cmakfiles/discoveryService.dir/discoveryService.cpp.o:链接器输入文件未使用,因为链接未完成

下面是我的目录结构的快速概述。每个目录都从该目录中包含的源文件创建一个静态库。大多数目录还需要生成依赖633/arm目录中的库的可执行文件:

这是我的原始Makefile:

$(shell ../../build_environment.sh)

BIN = ../../build/bin
TMP = build

BUILD_DEF = -DBUILD=$(BUILD_VERSION) -DBUILD_DATE=$(BUILD_DATE)

# these files are captured from the DSPLink Sample build directory (and the named  changed)
# they contain the appropriate includes and flags to build a dsplink application.
DSPLINK_INCLUDES = $(shell cat ../dsplink_config/dsplink_includes.txt)
DSPLINK_FLAGS = $(shell cat ../dsplink_config/dsplink_flags.txt)
DSPLINK_DEFINES = $(shell cat ../dsplink_config/dsplink_defines.txt)
DSPLINK_LIBS =      $(DSPLINK_PACKAGE_DIR)/dsplink/gpp/export/BIN/Linux/OMAPL1XX/RELEASE/dsplink.lib


#Our project variables
INCLUDE= -I. -I../framework -I../flagDictionary -I../logging -I../../dsp/include -      I../modbus -I../expat

TOOLCHAIN = /OMAP-L137/timesys/SDK/omapl137_evm/toolchain/bin
#TOOLCHAIN = ${FACTORY_DIR}/build_armv5l-timesys-linux-uclibcgnueabi/toolchain/bin
PLATFORM=armv5l-timesys-linux-uclibcgnueabi

#Compile Options
CC=$(TOOLCHAIN)/$(PLATFORM)-g++
LINKER=$(TOOLCHAIN)/$(PLATFORM)-g++
CFLAGS+=$(BUILD_DEF) $(INCLUDE)
DEBUG =  

#list of things to compile.
FW_BUILD_DIR=../framework/build
LOG_BUILD_DIR=../logging/build
XML_BUILD_DIR=../expat/build
MODBUS_BUILD_DIR=../modbus/build
FLAG_DICT_BUILD_DIR=../flagDictionary/build

CORE_FRAMEWORK_OBJECTS= $(FW_BUILD_DIR)/application.o \
                $(FW_BUILD_DIR)/arguments.o \
        $(FW_BUILD_DIR)/com.o \
        $(FW_BUILD_DIR)/memoryManagerBase.o \
        $(FW_BUILD_DIR)/memoryManager.o \
        $(FW_BUILD_DIR)/lockManager.o \
        $(FW_BUILD_DIR)/stopWatch.o \
        $(FW_BUILD_DIR)/controlCom.o \
        $(FW_BUILD_DIR)/status.o \
        $(FW_BUILD_DIR)/paths.o \
        $(LOG_BUILD_DIR)/subsystemLogMasks.o \
        $(LOG_BUILD_DIR)/logger.o

# removed utils.o from CORE

NET_FRAMEWORK_OBJECTS=  $(FW_BUILD_DIR)/message.o \
            $(FW_BUILD_DIR)/chunk.o \
            $(FW_BUILD_DIR)/multicastSocket.o \
            $(FW_BUILD_DIR)/serverSocket.o \
            $(FW_BUILD_DIR)/socket.o \
        $(FW_BUILD_DIR)/tcpReader.o

CONF_FRAMEWORK_OBJECTS= $(FW_BUILD_DIR)/configuration.o \
            $(FW_BUILD_DIR)/editConfig.o \
            $(FW_BUILD_DIR)/parseConfig.o \
            $(FW_BUILD_DIR)/xpath.o \
        $(XML_BUILD_DIR)/xmlparse.o \
        $(XML_BUILD_DIR)/xmlrole.o \
        $(XML_BUILD_DIR)/xmltok.o

MODBUS_OBJECTS=     $(MODBUS_BUILD_DIR)/modbus.o \
        $(MODBUS_BUILD_DIR)/modbusFacade.o

MODBUS_RTU_OBJECTS= $(MODBUS_BUILD_DIR)/modbus.o \
        $(MODBUS_BUILD_DIR)/rtuFacade.o

FLAG_DICT_OBJECTS=  $(FLAG_DICT_BUILD_DIR)/flagEntry.o \
        $(FLAG_DICT_BUILD_DIR)/flagDictionary.o


OBJECTS = discoveryService.o \
  httpService.o \
  modbusService.o \
  streamingService.o \
  trendMap.o \
  trendService.o \
  tripBuffer.o \
  modbusRTUService.o \
  tripReader.o
EXES = discoveryService httpService modbusService streamingService trendService    tripReader modbusRTUService cmprXfr

all: $(OBJECTS) $(EXES)

.c.o:
mkdir -p build
$(CC) -c $(CFLAGS) $(DSPLINK_INCLUDES) $(DSPLINK_FLAGS) $(DSPLINK_DEFINES) $(DEBUG)       -o $(TMP)/$@ $< 

.cpp.o:
mkdir -p build
$(CC) -c $(CFLAGS) $(DSPLINK_INCLUDES) $(DSPLINK_FLAGS) $(DSPLINK_DEFINES) $(DEBUG)   -o $(TMP)/$@ $< 

discoveryService: $(FRAMEWORK_OBJECTS) discoveryService.o
$(LINKER) -lpthread -lc -o $(BIN)/$@ $(DSPLINK_LIBS) build/discoveryService.o    $(FLAG_DICT_OBJECTS) $(CORE_FRAMEWORK_OBJECTS) $(NET_FRAMEWORK_OBJECTS)    $(CONF_FRAMEWORK_OBJECTS)

httpService: $(FRAMEWORK_OBJECTS) httpService.o
$(LINKER) -lpthread -lc -o $(BIN)/$@ $(DSPLINK_LIBS) build/httpService.o   $(FLAG_DICT_OBJECTS) $(CORE_FRAMEWORK_OBJECTS)

modbusService: $(FRAMEWORK_OBJECTS) modbusService.o
$(LINKER) -lpthread -lc -o $(BIN)/$@ $(DSPLINK_LIBS) build/modbusService.o  $(FLAG_DICT_OBJECTS) $(CORE_FRAMEWORK_OBJECTS) $(MODBUS_OBJECTS) $(NET_FRAMEWORK_OBJECTS)

modbusRTUService: $(FRAMEWORK_OBJECTS) modbusRTUService.o
$(LINKER) -lpthread -lc -o $(BIN)/$@ $(DSPLINK_LIBS) build/modbusRTUService.o      $(FLAG_DICT_OBJECTS) $(CORE_FRAMEWORK_OBJECTS) $(MODBUS_RTU_OBJECTS)

cmprXfr: $(FRAMEWORK_OBJECTS) cmprXfr.o
$(LINKER) -lpthread -lc -o $(BIN)/$@ $(DSPLINK_LIBS) build/cmprXfr.o     $(CORE_FRAMEWORK_OBJECTS) $(NET_FRAMEWORK_OBJECTS) $(MODBUS_OBJECTS) $(FLAG_DICT_OBJECTS)

streamingService: $(FRAMEWORK_OBJECTS) streamingService.o
$(LINKER) -lpthread -lc -o $(BIN)/$@ $(DSPLINK_LIBS) build/streamingService.o  build/tripBuffer.o $(FLAG_DICT_OBJECTS) $(CORE_FRAMEWORK_OBJECTS) $(NET_FRAMEWORK_OBJECTS)     $(CONF_FRAMEWORK_OBJECTS)

trendService: $(FRAMEWORK_OBJECTS) trendService.o trendMap.o
$(LINKER) -lpthread -lc -o $(BIN)/$@ $(DSPLINK_LIBS) build/trendService.o build/trendMap.o $(FLAG_DICT_OBJECTS) $(CORE_FRAMEWORK_OBJECTS) $(NET_FRAMEWORK_OBJECTS)  $(CONF_FRAMEWORK_OBJECTS)

tripReader: $(FRAMEWORK_OBJECTS) tripReader.o
$(LINKER) -lpthread -lc -o $(BIN)/$@ $(DSPLINK_LIBS) build/tripReader.o  build/tripBuffer.o $(FLAG_DICT_OBJECTS) $(CORE_FRAMEWORK_OBJECTS) $(NET_FRAMEWORK_OBJECTS) $(CONF_FRAMEWORK_OBJECTS)

USBstreamingService: $(FRAMEWORK_OBJECTS) USBstreamingService.o
$(LINKER) -lpthread -lc -o $(BIN)/$@ $(DSPLINK_LIBS) build/USBstreamingService.o $(FLAG_DICT_OBJECTS) $(CORE_FRAMEWORK_OBJECTS)
这是我的CMakeList.txt,在633/arm/communications目录下,我的源文件所在的位置

INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/arm/framework     ${CMAKE_SOURCE_DIR}/arm/flagDictionary ${CMAKE_SOURCE_DIR}/arm/logging ${CMAKE_SOURCE_DIR}/dsp/include ${CMAKE_SOURCE_DIR}/arm/modbus ${CMAKE_SOURCE_DIR}/arm/expat)

INCLUDE_DIRECTORIES(${FACTORY_CURRENT}/build_armv5l-timesys-linux-  uclibcgnueabi/DSPLink-1_65_01/DSPLink-1_65_01/dsplink/gpp/inc/usr)
INCLUDE_DIRECTORIES(/home/projects/OMAP-L137/timesys/factory-20120925-633/build_armv5l-  timesys-linux-uclibcgnueabi/DSPLink-1_65_01/DSPLink-1_65_01/dsplink/gpp/inc/usr)
INCLUDE_DIRECTORIES(/home/projects/OMAP-L137/timesys/factory-20120925-633/build_armv5l-  timesys-linux-uclibcgnueabi/DSPLink-1_65_01/DSPLink-1_65_01/dsplink/gpp/inc/sys/Linux)
INCLUDE_DIRECTORIES(${FACTORY_CURRENT}/build_armv5l-timesys-linux-uclibcgnueabi/DSPLink-1_65_01/DSPLink-1_65_01/dsplink/gpp/inc)
INCLUDE_DIRECTORIES(${FACTORY_CURRENT}/build_armv5l-timesys-linux-uclibcgnueabi/DSPLink-1_65_01/DSPLink-1_65_01/dsplink/gpp/inc/usr)
INCLUDE_DIRECTORIES(${FACTORY_CURRENT}/build_armv5l-timesys-linux-uclibcgnueabi/DSPLink-1_65_01/DSPLink-1_65_01/dsplink/gpp/inc/sys/Linux)
INCLUDE_DIRECTORIES(${FACTORY_CURRENT}/build_armv5l-timesys-linux-uclibcgnueabi/DSPLink-1_65_01/DSPLink-1_65_01/dsplink/gpp/inc/sys/Linux/2.6.18)
INCLUDE_DIRECTORIES(${FACTORY_CURRENT}/build_armv5l-timesys-linux-uclibcgnueabi/DSPLink-1_65_01/DSPLink-1_65_01/dsplink/gpp/src/samples/loop)
INCLUDE_DIRECTORIES(${FACTORY_CURRENT}/build_armv5l-timesys-linux-uclibcgnueabi/DSPLink-1_65_01/DSPLink-1_65_01/dsplink/gpp/src/samples/loop/Linux)
INCLUDE_DIRECTORIES(${FACTORY_CURRENT}/build_armv5l-timesys-linux-uclibcgnueabi/DSPLink-1_65_01/DSPLink-1_65_01/dsplink/gpp/src/samples/loop/Linux/2.6.18)
INCLUDE_DIRECTORIES(${FACTORY_CURRENT}/build_armv5l-timesys-linux-uclibcgnueabi/DSPLink-1_65_01/DSPLink-1_65_01/dsplink/gpp/BUILD/INCLUDE/USER)
INCLUDE_DIRECTORIES(${FACTORY_CURRENT}/build_armv5l-timesys-linux-uclibcgnueabi/DSPLink-1_65_01/DSPLink-  1_65_01/dsplink/gpp/export/INCLUDE/Linux/OMAPL1XX/internal)
INCLUDE_DIRECTORIES(${FACTORY_DIR}/build_armv5l-timesys-linux-uclibcgnueabi/toolchain/include)

TARGET_LINK_LIBRARIES(${FACTORY_CURRENT}/build_armv5l-timesys-linux-uclibcgnueabi/DSPLink-1_65_01/DSPLink-   1_65_01/dsplink/gpp/export/BIN/Linux/OMAPL1XX/RELEASE/dsplink.lib)

SET(communications_SOURCES 
discoveryService.cpp
httpService.cpp
modbusRTUService.cpp
modbusService.cpp
streamingService.cpp
trendMap.cpp
trendService.cpp
tripBuffer.cpp
tripReader.cpp
)

ADD_LIBRARY(communications ${communications_SOURCES})

TARGET_LINK_LIBRARIES(${CMAKE_SOURCE_DIR}/arm/flagDictionary/libflagDictionary.a)
TARGET_LINK_LIBRARIES(${CMAKE_SOURCE_DIR}/arm/framework/libframework.a)
TARGET_LINK_LIBRARIES(${CMAKE_SOURCE_DIR}/arm/communications/libcommunications.a)
         TARGET_LINK_LIBRARIES(${DSPLINK_PACKAGE_DIR}/dsplink/gpp/export/BIN/Linux/OMAPL1XX/RELEASE/dsplink.lib)

ADD_EXECUTABLE(discoveryService discoveryService.cpp)

我使用了如中所示的ADD_可执行文件,并尝试使用TARGET_LINK_库来链接这些库。非常感谢您的帮助。

在添加可执行文件之后,是否需要目标链接库显示服务通信。。达到理想的结果请参阅函数的定义:TARGET\u LINK\u LIBRARIEStarget library1 library2。另见。还请尝试修改其他目标链接库:目标是通信。在目标链接库中,目标名称作为第一个参数丢失。请检查。
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/arm/framework     ${CMAKE_SOURCE_DIR}/arm/flagDictionary ${CMAKE_SOURCE_DIR}/arm/logging ${CMAKE_SOURCE_DIR}/dsp/include ${CMAKE_SOURCE_DIR}/arm/modbus ${CMAKE_SOURCE_DIR}/arm/expat)

INCLUDE_DIRECTORIES(${FACTORY_CURRENT}/build_armv5l-timesys-linux-  uclibcgnueabi/DSPLink-1_65_01/DSPLink-1_65_01/dsplink/gpp/inc/usr)
INCLUDE_DIRECTORIES(/home/projects/OMAP-L137/timesys/factory-20120925-633/build_armv5l-  timesys-linux-uclibcgnueabi/DSPLink-1_65_01/DSPLink-1_65_01/dsplink/gpp/inc/usr)
INCLUDE_DIRECTORIES(/home/projects/OMAP-L137/timesys/factory-20120925-633/build_armv5l-  timesys-linux-uclibcgnueabi/DSPLink-1_65_01/DSPLink-1_65_01/dsplink/gpp/inc/sys/Linux)
INCLUDE_DIRECTORIES(${FACTORY_CURRENT}/build_armv5l-timesys-linux-uclibcgnueabi/DSPLink-1_65_01/DSPLink-1_65_01/dsplink/gpp/inc)
INCLUDE_DIRECTORIES(${FACTORY_CURRENT}/build_armv5l-timesys-linux-uclibcgnueabi/DSPLink-1_65_01/DSPLink-1_65_01/dsplink/gpp/inc/usr)
INCLUDE_DIRECTORIES(${FACTORY_CURRENT}/build_armv5l-timesys-linux-uclibcgnueabi/DSPLink-1_65_01/DSPLink-1_65_01/dsplink/gpp/inc/sys/Linux)
INCLUDE_DIRECTORIES(${FACTORY_CURRENT}/build_armv5l-timesys-linux-uclibcgnueabi/DSPLink-1_65_01/DSPLink-1_65_01/dsplink/gpp/inc/sys/Linux/2.6.18)
INCLUDE_DIRECTORIES(${FACTORY_CURRENT}/build_armv5l-timesys-linux-uclibcgnueabi/DSPLink-1_65_01/DSPLink-1_65_01/dsplink/gpp/src/samples/loop)
INCLUDE_DIRECTORIES(${FACTORY_CURRENT}/build_armv5l-timesys-linux-uclibcgnueabi/DSPLink-1_65_01/DSPLink-1_65_01/dsplink/gpp/src/samples/loop/Linux)
INCLUDE_DIRECTORIES(${FACTORY_CURRENT}/build_armv5l-timesys-linux-uclibcgnueabi/DSPLink-1_65_01/DSPLink-1_65_01/dsplink/gpp/src/samples/loop/Linux/2.6.18)
INCLUDE_DIRECTORIES(${FACTORY_CURRENT}/build_armv5l-timesys-linux-uclibcgnueabi/DSPLink-1_65_01/DSPLink-1_65_01/dsplink/gpp/BUILD/INCLUDE/USER)
INCLUDE_DIRECTORIES(${FACTORY_CURRENT}/build_armv5l-timesys-linux-uclibcgnueabi/DSPLink-1_65_01/DSPLink-  1_65_01/dsplink/gpp/export/INCLUDE/Linux/OMAPL1XX/internal)
INCLUDE_DIRECTORIES(${FACTORY_DIR}/build_armv5l-timesys-linux-uclibcgnueabi/toolchain/include)

TARGET_LINK_LIBRARIES(${FACTORY_CURRENT}/build_armv5l-timesys-linux-uclibcgnueabi/DSPLink-1_65_01/DSPLink-   1_65_01/dsplink/gpp/export/BIN/Linux/OMAPL1XX/RELEASE/dsplink.lib)

SET(communications_SOURCES 
discoveryService.cpp
httpService.cpp
modbusRTUService.cpp
modbusService.cpp
streamingService.cpp
trendMap.cpp
trendService.cpp
tripBuffer.cpp
tripReader.cpp
)

ADD_LIBRARY(communications ${communications_SOURCES})

TARGET_LINK_LIBRARIES(${CMAKE_SOURCE_DIR}/arm/flagDictionary/libflagDictionary.a)
TARGET_LINK_LIBRARIES(${CMAKE_SOURCE_DIR}/arm/framework/libframework.a)
TARGET_LINK_LIBRARIES(${CMAKE_SOURCE_DIR}/arm/communications/libcommunications.a)
         TARGET_LINK_LIBRARIES(${DSPLINK_PACKAGE_DIR}/dsplink/gpp/export/BIN/Linux/OMAPL1XX/RELEASE/dsplink.lib)

ADD_EXECUTABLE(discoveryService discoveryService.cpp)