Je travaille sur un projet, codant en C++, pour développer une communication Modbus sur TCP/IP entre un Raspberry pi et un Arduino.Comment ajouter une compilation de bibliothèque (en-tête + .c) dans MakeFile (Eclipse)?
J'ai un exemple basique de "hello world" qui fonctionne dans Raspberry. Je souhaite ajouter la bibliothèque libmodbus (fichiers .h et .c) dans mon projet Eclipse et tester un test d'unité de serveur fourni. J'ai déjà ajouté le répertoire dans "Chemin et symbole" (GNU C et GNU C++) et le "inclus".
Dans le MakeFile, j'ai ajouté le répertoire de la section du fichier libmodbus (#Include paths). Lorsque je compile le projet, seuls les fichiers .h sont compilés, pas le fichier .c. Le "modbus.h" est reconnu, mais ils sont des erreurs comme « undefined reference to .... (modbus) fonctions.
J'ai testé de nombreuses solutions, mais il ne fonctionne pas encore.
Merci à . avance
################################################################################
# MAKEFILE : RPi2Test01
################################################################################
#===============================================================================
# User compiling options
#===============================================================================
#HOST: PC, PCLINUX, ARM
HOST := PC
#HOST := PCLINUX
#HOST :: ARM
#TARGET: PC, ARM, RASPBERRYPI
#TARGET := PC
#TARGET := ARM
TARGET := RASPBERRYPI
#DEBUG: YES, NO
DEBUG := NO
#===============================================================================
# Compiling options
#===============================================================================
#-------------------------------------------------------------------------------
# Determine compiling environment #ENVIRONMENT: CYGWIN,LINUX,WCROSS,LCROSS,ARM
#-------------------------------------------------------------------------------
ifeq ($(HOST),PC)
ifeq ($(TARGET),PC)
ENVIRONMENT := CYGWIN
else
ENVIRONMENT := WCROSS
endif
else
ifeq ($(HOST),LINUXPC)
ifeq ($(TARGET),PC)
ENVIRONMENT := LINUX
else
ENVIRONMENT := LCROSS
endif
else
ifeq ($(HOST),ARM)
ENVIRONMENT := ARM
endif
endif
endif
#-------------------------------------------------------------------------------
# Customize: WIN32 (CYGWIN)
#-------------------------------------------------------------------------------
ifeq ($(ENVIRONMENT),CYGWIN)
PREFIX :=
BINPREFIX :=
CFLAGS := -std=gnu99 -Wno-write-strings
CFLAGS += -D_WIN32_ -D__CYGWIN__ -D_$(TARGET)_
CPPFLAGS := -pipe -g2 -Wall -Wno-write-strings -Wno-reorder
CPPFLAGS += -D_WIN32_ -D__CYGWIN__ -D_$(TARGET)_
LDFLAGS := -enable-auto-import
LIBEXT := .a
BINEXT := .exe
endif
#-------------------------------------------------------------------------------
# Customize: LINUX (LINUX)
#-------------------------------------------------------------------------------
ifeq ($(ENVIRONMENT),LINUX)
PREFIX :=
BINPREFIX :=
CFLAGS := -std=gnu99 -Wno-write-strings
CFLAGS += -D_LINUX_ -D_$(TARGET)_
CPPFLAGS := -Wno-write-strings -Wno-reorder
CPPFLAGS += -D_LINUX_ -D_$(TARGET)_
LDFLAGS := -g
LIBEXT := .a
BINEXT := .out
endif
#-------------------------------------------------------------------------------
# Customize: Cross-compiling CYGWIN to ARM-LINUX-LINARO (WCROSS)
#-------------------------------------------------------------------------------
ifeq ($(ENVIRONMENT),WCROSS)
PREFIX := arm-linux-gnueabihf-
BINPREFIX := /cygdrive/c/Linaro/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09/bin/
CFLAGS := -std=gnu99 -Wno-write-strings
CFLAGS += -D_LINUX_ -D_$(TARGET)_
CPPFLAGS := -Wno-write-strings -Wno-reorder
CPPFLAGS += -D_LINUX_ -D_$(TARGET)_
LDFLAGS := -g
LIBEXT := .a
BINEXT := .out
endif
#-------------------------------------------------------------------------------
# Customize: Cross-compiling LINUX to ARM-LINUX-LINARO (LCROSS)
#-------------------------------------------------------------------------------
ifeq ($(ENVIRONMENT),LCROSS)
PREFIX := arm-linux-gnueabihf-
BINPREFIX := /usr/local/Linaro/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09/bin/
CFLAGS := -std=gnu99 -Wno-write-strings
CFLAGS += -D_LINUX_ -D_$(TARGET)_
CPPFLAGS := -Wno-write-strings -Wno-reorder
CPPFLAGS += -D_LINUX_ -D_$(TARGET)_
LDFLAGS := -g
LIBEXT := .a
BINEXT := .out
endif
#-------------------------------------------------------------------------------
# Customize: ARM-LINUX-LINARO (ARM)
#-------------------------------------------------------------------------------
ifeq ($(ENVIRONMENT),ARM)
PREFIX :=
BINPREFIX :=
CFLAGS := -std=gnu99 -Wno-write-strings
CFLAGS += -D_LINUX_ -D_$(TARGET)_
CPPFLAGS := -Wno-write-strings -Wno-reorder
CPPFLAGS += -D_LINUX_ -D_$(TARGET)_
LDFLAGS := -g
LIBEXT := .a
BINEXT := .out
endif
#-------------------------------------------------------------------------------
# Compiling and linking features - Paths and libraries
#-------------------------------------------------------------------------------
CINC_PATH := $(INCLUDE)
CLIB_PATH := $(CLIB_PATH)
ifeq ($(ENVIRONMENT),ARM)
CINC_PATH += -I/usr/local/include
CLIB_PATH += -L/usr/local/lib
endif
ifeq ($(DEBUG),YES)
LIBSUBFIX := d
CPPFLAGS += -D_DEBUG_
else
LIBSUBFIX :=
CPPFLAGS +=
endif
LDADDLIBS += -lpthread -lrt -lm -lstdc++
#===============================================================================
# Building tools
#===============================================================================
CC := @$(BINPREFIX)$(PREFIX)gcc
CXX := @$(BINPREFIX)$(PREFIX)g++
LD := @$(BINPREFIX)$(PREFIX)ld
AR := @$(BINPREFIX)$(PREFIX)ar
MD := @mkdir -p
RM := @rm -rf
ECHO := @echo
#===============================================================================
# File pathts
#===============================================================================
SRCDIR := .
OBJPATH := ./OBJ
LIBPATH := ./LIB
GENPATH := ./BIN
#===============================================================================
# Source files
#===============================================================================
MAIN_HOME := $(SRCDIR)
CPP_SRCS_MAIN := $(MAIN_HOME)/RPi2Test01.cpp
#===============================================================================
# Object files
#===============================================================================
OBJS_MAIN := $(patsubst $(MAIN_HOME)/%.cpp, \
$(OBJPATH)/%.cpp.o, \
$(CPP_SRCS_MAIN))
#LIB_SRC := C:/libmodbus-3.0.6/src/%.c
#LIBSMAIN := $(patsubst C:/libmodbus-3.0.6/src/%.c, \
$(LIBPATH)/%.c.o, \
$(LIB_SRC))
#===============================================================================
# Building options
#===============================================================================
# Include paths
CINC_PATH += -I C:/libmodbus-3.0.6/src
CLIB_PATH += -L C:/libmodbus-3.0.6/src
CLIB_PATH += -L$(LIBPATH)
# Compiling and Linking options
CFLAGS := $(CINC_PATH) $(CFLAGS)
CPPFLAGS := $(CINC_PATH) $(CPPFLAGS)
LDFLAGS := $(CLIB_PATH) $(LDFLAGS)
#===============================================================================
# Building targets
#===============================================================================
BINMAIN := $(GENPATH)/RPi2Test01$(BINEXT)
#-------------------------------------------------------------------------------
# All targets
#-------------------------------------------------------------------------------
.PHONY: all
all: dirs $(BINMAIN)
#-------------------------------------------------------------------------------
# Building directories
#-------------------------------------------------------------------------------
dirs:
$(MD) $(OBJPATH)
$(MD) $(LIBPATH)
$(MD) $(GENPATH)
#-------------------------------------------------------------------------------
# Targets
#-------------------------------------------------------------------------------
$(BINMAIN): $(OBJS_MAIN) $(LIBSMAIN)
$(ECHO) 'Building target: [email protected]'
$(CC) $(OBJS_MAIN) [email protected] $(LDFLAGS) $(LDADDLIBS)
#-------------------------------------------------------------------------------
# Compiling
#-------------------------------------------------------------------------------
# File compiling: Main Programs ------------------------------------------------
$(OBJPATH)/%.cpp.o: $(MAIN_HOME)/%.cpp
$(ECHO) 'Building file: $<'
$(CXX) -c $(CPPFLAGS) [email protected] $<
#===============================================================================
# Clean
#===============================================================================
.PHONY: clean
clean:
$(ECHO) 'Removing...'
$(RM) ${OBJPATH}/*.o ${OBJPATH}/*.err ${OBJPATH}/*.map
$(RM) ${GENPATH}/*.o ${GENPATH}/*.out ${GENPATH}/*.exe ${GENPATH}/*.tmp
$(RM) ${SRCDIR}/*.a ${OBJPATH}/*.a ${LIBPATH}/*.a ${GENPATH}/*.a
$(RM) ${SRCDIR}/*.so ${OBJPATH}/*.so ${LIBPATH}/*.so ${GENPATH}/*.so
$(RM) ${SRCDIR}/*.out.stackdump ${SRCDIR}/*.exe.stackdump
$(RM) ${GENPATH}/*.out.stackdump ${GENPATH}/*.exe.stackdump
$(RM) ${OBJPATH} ${LIBPATH} ${GENPATH}
$(RM) ./*.o ./*.out ./*.exe ./*.a ./*.so ./*.err ./*.map
$(RM) ./*.out.stackdump ./*.exe.stackdump
$(ECHO) 'Files removed'
Merci, j'ajouté cette ligne, mais cela ne fonctionne pas 'ne peut pas trouver -lmodbus' –
Vérifiez qu'il y a 'libmodbus.so' dans'/usr/lib' – igagis
Non, je n'ai pas 'libmodbus.so' n'importe où. Je viens de télécharger les fichiers libmodbus sur le site officiel –