Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

makefile pour linux -> mac

3 réponses
Avatar
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

3 réponses

Avatar
Schmurtz
(Barth?l?my von Haller) wrote:

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.


"-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

Avatar
Saïd
Barth?l?my von Haller :

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.
Avatar
Schmurtz
Saïd wrote:

LIBslSYSMW c'est le nom du target et par rapport a linux les noms se
terminent par .dylib au lieu de .so.


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