2010-03-29 19 views
1

我想要使用附帶的Makefile在Mac上構建levmar-2.5數學庫。它需要LAPACK,
另一個包含在Accelerate Framework中的數學庫。我不知道如何修改Makefile以指示庫的位置,以便它正確構建。在框架中有一個
libLAPACK.dylib。最終,我會想用這個庫來建立另一個庫。另外我不確定混合.so和.dylib動態庫是否會出現問題。
謝謝。該項目位於levmar試圖在使用加速框架的Mac上構建LEVMAR數學庫

這裏是Makefile中:

# 
# Unix/Linux GCC Makefile for Levenberg - Marquardt minimization 
# Under windows, use Makefile.vc for MSVC 
# 

CC=gcc 
CONFIGFLAGS=#-ULINSOLVERS_RETAIN_MEMORY 
#ARCHFLAGS=-march=pentium4 # YOU MIGHT WANT TO UNCOMMENT THIS FOR P4 
CFLAGS=$(CONFIGFLAGS) $(ARCHFLAGS) -O3 -funroll-loops -Wall #-ffast-math #-pg 
LAPACKLIBS_PATH=/usr/local/lib # WHEN USING LAPACK, CHANGE THIS TO WHERE YOUR COMPILED LIBS ARE! 
LDFLAGS=-L$(LAPACKLIBS_PATH) -L. 
LIBOBJS=lm.o Axb.o misc.o lmlec.o lmbc.o lmblec.o lmbleic.o 
LIBSRCS=lm.c Axb.c misc.c lmlec.c lmbc.c lmblec.c lmbleic.c 
DEMOBJS=lmdemo.o 
DEMOSRCS=lmdemo.c 
AR=ar 
RANLIB=ranlib 
LAPACKLIBS=-llapack -lblas -lf2C# comment this line if you are not using LAPACK. 
          # On systems with a FORTRAN (not f2c'ed) version of LAPACK, -lf2c is 
          # not necessary; on others, -lf2c is equivalent to -lF77 -lI77 

#LAPACKLIBS=-L/usr/local/atlas/lib -llapack -lcblas -lf77blas -latlas -lf2C# This works with the ATLAS updated lapack and Linux_P4SSE2 
            # from http://www.netlib.org/atlas/archives/linux/ 

#LAPACKLIBS=-llapack -lgoto2 -lpthread -lf2C# This works with GotoBLAS 
             # from http://www.tacc.utexas.edu/research-development /tacc-projects/ 

#LAPACKLIBS=-L/opt/intel/mkl/8.0.1/lib/32/ -lmkl_lapack -lmkl_ia32 -lguide -lf2C# This works with MKL 8.0.1 from 
        # http://www.intel.com/cd/software/products/asmo-na/eng/perflib/mkl/index.htm 

LIBS=$(LAPACKLIBS) 

all: liblevmar.a lmdemo 

liblevmar.a: $(LIBOBJS) 
    $(AR) crv liblevmar.a $(LIBOBJS) 
    $(RANLIB) liblevmar.a 

lmdemo: $(DEMOBJS) liblevmar.a 
    $(CC) $(LDFLAGS) $(DEMOBJS) -o lmdemo -llevmar $(LIBS) -lm 

lm.o: lm.c lm_core.c levmar.h misc.h compiler.h 
Axb.o: Axb.c Axb_core.c levmar.h misc.h 
misc.o: misc.c misc_core.c levmar.h misc.h 
lmlec.o: lmlec.c lmlec_core.c levmar.h misc.h 
lmbc.o: lmbc.c lmbc_core.c levmar.h misc.h compiler.h 
lmblec.o: lmblec.c lmblec_core.c levmar.h misc.h 
lmbleic.o: lmbleic.c lmbleic_core.c levmar.h misc.h 

lmdemo.o: levmar.h 

clean: 
    @rm -f $(LIBOBJS) $(DEMOBJS) 

cleanall: clean 
    @rm -f lmdemo 
    @rm -f liblevmar.a 

depend: 
    makedepend -f Makefile $(LIBSRCS) $(DEMOSRCS) 

# DO NOT DELETE THIS LINE -- make depend depends on it. 

回答

4

你需要傳遞-framework Accelerate到GCC。您還需要#include <Accelerate/Accelerate.h>。詳細信息是here

+1

謝謝保羅。我能夠建立圖書館以及依賴levmar的圖書館。 – 2010-03-29 18:20:30

1

以供參考,在這裏是一個將工作的Makefile:

# 
# Unix/Linux GCC Makefile for Levenberg - Marquardt minimization 
# Under windows, use Makefile.vc for MSVC 
# 

CC=gcc 
CONFIGFLAGS=#-ULINSOLVERS_RETAIN_MEMORY 
#ARCHFLAGS=-march=pentium4 # YOU MIGHT WANT TO UNCOMMENT THIS FOR P4 
CFLAGS=$(CONFIGFLAGS) $(ARCHFLAGS) -O3 -funroll-loops -Wall #-ffast-math #-pg 
#LAPACKLIBS_PATH=/usr/local/lib # WHEN USING LAPACK, CHANGE THIS TO WHERE YOUR COMPILED LIBS ARE! 
LDFLAGS=-L. # for non-OSX, add: -L$(LAPACKLIBS) 
LIBOBJS=lm.o Axb.o misc.o lmlec.o lmbc.o lmblec.o lmbleic.o 
LIBSRCS=lm.c Axb.c misc.c lmlec.c lmbc.c lmblec.c lmbleic.c 
DEMOBJS=lmdemo.o 
DEMOSRCS=lmdemo.c 
AR=ar 
RANLIB=ranlib 

LAPACKLIBS=-framework Accelerate #This works for OSX where the SDK is installed. 

LIBS=$(LAPACKLIBS) 

all: liblevmar.a lmdemo 

liblevmar.a: $(LIBOBJS) 
    $(AR) crv liblevmar.a $(LIBOBJS) 
    $(RANLIB) liblevmar.a 

lmdemo: $(DEMOBJS) liblevmar.a 
    $(CC) $(LDFLAGS) $(DEMOBJS) -o lmdemo -llevmar $(LIBS) -lm 

lm.o: lm.c lm_core.c levmar.h misc.h compiler.h 
Axb.o: Axb.c Axb_core.c levmar.h misc.h 
misc.o: misc.c misc_core.c levmar.h misc.h 
lmlec.o: lmlec.c lmlec_core.c levmar.h misc.h 
lmbc.o: lmbc.c lmbc_core.c levmar.h misc.h compiler.h 
lmblec.o: lmblec.c lmblec_core.c levmar.h misc.h 
lmbleic.o: lmbleic.c lmbleic_core.c levmar.h misc.h 

lmdemo.o: levmar.h 

clean: 
    @rm -f $(LIBOBJS) $(DEMOBJS) 

cleanall: clean 
    @rm -f lmdemo 
    @rm -f liblevmar.a 

depend: 
    makedepend -f Makefile $(LIBSRCS) $(DEMOSRCS) 

# DO NOT DELETE THIS LINE -- make depend depends on it. 
+0

謝謝喬納斯。它在OSX上效果很好。有關如何使其在iOS上工作的任何線索? – 2011-05-20 14:49:57

+0

對於「ARCHFLAGS = -arch armv6 -arch armv7」,make進程失敗,並顯示「gcc-4.2:嘗試執行exec錯誤/usr/bin/arm-apple-darwin10-gcc-4.2.1」:execvp:No such文件或目錄「 – 2011-05-20 15:13:23

+0

對該主題發起一個全新的問題:http://stackoverflow.com/questions/6074096/how-to-build-an-iphone-static-library-based-on-a-makefile – 2011-05-20 15:26:46