makefile pour linux -> mac
Le
bartoche
Bonjour à tous !
J'aimerais utiliser un petit programme nommé LeakTracer qui marche
très bien sur linux pour trouver les memory leak. Malheureusement le
makefile qui sert à créer une librairie dynamique est prévu pour linux
et utilise les options -pthread et -shared qui ne sont pas dispo sur
mac.
Quelqu'un pourrait m'indiquer comment modifier ce makefile pour
pouvoir utiliser LeakTracer sur mac ?
d'avance merci beaucoup
Barth
Voici le makefile :
CC = g++
# Source files
SRC := LeakTracer.cc
# Comment out to disable thread safetly
THREAD=-DTHREAD_SAVE -D_REENTRANT -D_THREAD_SAFE -pthread
# Common flags
C_FLAGS = -g -pipe -Wall -W $(THREAD)
O_FLAGS = $(C_FLAGS)
# Object files
OBJ_DIR = .
OBJ := $(patsubst %.cc,$(OBJ_DIR)/%.o,$(SRC))
SHOBJ := $(patsubst %.o,$(OBJ_DIR)/%.so,$(OBJ))
.PHONY: all clean tidy distrib test
all: $(OBJ) $(SHOBJ)
clean: tidy
rm -f $(OBJ) leak.out
tidy:
rm -f *~ *orig *bak *rej
tags: $(SRC) $(INCL)
ctags $(SRC) $(INCL)
distrib: clean all README.html
(cd .. && tar cvfz /u/erwin/drylock/LeakTracer/LeakTracer.tar.gz -X
LeakTracer/.tarexcl LeakTracer/)
$(OBJ_DIR)/%.o: %.cc
$(CC) -fPIC -c $(C_FLAGS) $< -o $@
$(OBJ_DIR)/%.so : $(OBJ_DIR)/%.o
$(CC) $(O_FLAGS) -shared -fPIC -o $@ $<
README.html: README
/u/erwin/ed/mcl/util/htmlize.pl README
test:
$(CC) $(C_FLAGS) test.cc -o test
./test
./LeakCheck ./test
./leak-analyze ./test
# ./compare-test test.template test.result
J'aimerais utiliser un petit programme nommé LeakTracer qui marche
très bien sur linux pour trouver les memory leak. Malheureusement le
makefile qui sert à créer une librairie dynamique est prévu pour linux
et utilise les options -pthread et -shared qui ne sont pas dispo sur
mac.
Quelqu'un pourrait m'indiquer comment modifier ce makefile pour
pouvoir utiliser LeakTracer sur mac ?
d'avance merci beaucoup
Barth
Voici le makefile :
CC = g++
# Source files
SRC := LeakTracer.cc
# Comment out to disable thread safetly
THREAD=-DTHREAD_SAVE -D_REENTRANT -D_THREAD_SAFE -pthread
# Common flags
C_FLAGS = -g -pipe -Wall -W $(THREAD)
O_FLAGS = $(C_FLAGS)
# Object files
OBJ_DIR = .
OBJ := $(patsubst %.cc,$(OBJ_DIR)/%.o,$(SRC))
SHOBJ := $(patsubst %.o,$(OBJ_DIR)/%.so,$(OBJ))
.PHONY: all clean tidy distrib test
all: $(OBJ) $(SHOBJ)
clean: tidy
rm -f $(OBJ) leak.out
tidy:
rm -f *~ *orig *bak *rej
tags: $(SRC) $(INCL)
ctags $(SRC) $(INCL)
distrib: clean all README.html
(cd .. && tar cvfz /u/erwin/drylock/LeakTracer/LeakTracer.tar.gz -X
LeakTracer/.tarexcl LeakTracer/)
$(OBJ_DIR)/%.o: %.cc
$(CC) -fPIC -c $(C_FLAGS) $< -o $@
$(OBJ_DIR)/%.so : $(OBJ_DIR)/%.o
$(CC) $(O_FLAGS) -shared -fPIC -o $@ $<
README.html: README
/u/erwin/ed/mcl/util/htmlize.pl README
test:
$(CC) $(C_FLAGS) test.cc -o test
./test
./LeakCheck ./test
./leak-analyze ./test
# ./compare-test test.template test.result

Poser une question


"-pthread" il faut la supprimer, les fonctions pthread_* sont dans
libSystem, bibliothèque automatiquement liée avec les programmes (comme
la libc sous linux).
"-shared" si je ne trompe pas, il faut la remplacer par -dynamic
--
Schmurtz
Voici une ligne pour faire une librairie dynamique depuis des OBJ;
gcc -dynamiclib -flat_namespace -undefined suppress -single_module
-install_name libsysmw.dylib -o $(LIBslSYSMW) $(OBJ)
LIBslSYSMW c'est le nom du target et par rapport a linux les noms se
terminent par .dylib au lieu de .so.
Certaines option doivent etre inutiles si tu ne fais pas appel a des
symboles non-definis par ta librairie.
--
Saïd.
C programmers never die - they're just cast into void.
Je crois bien, que ce n'est pas obligatoire : les modules apache sont
tous en .so par exemple. Si ça peut éviter de réécrire des makefile, ça
peut être pratique de pas suivre les règles.
--
Schmurtz