MBP で共有ライブラリをコンパイルしたいのですが、こちらのアドバイスに基づいて、共有ライブラリを作成するためにclang
(から) に切り替えましたgcc
。私makefile
は:
CC = clang
CFLAGS = -c -fPIC -Wall -O3 -lpthread -g
BaseDir = /Users/admin/Prog/
Include = -I$(BaseDir)UMFPACK/Include -I$(BaseDir)AMD/Include -I$(BaseDir)SuiteSparse_config
Lib = -L$(BaseDir)UMFPACK/Lib -L$(BaseDir)AMD/Lib -L$(BaseDir)GotoBLAS2 -L$(BaseDir)SuiteSparse_config
AddFiles = -lumfpack -lamd -lgoto2 -lsuitesparseconfig
StaticLibs = $(BaseDir)GotoBLAS2/libgoto2.a $(BaseDir)UMFPACK/Lib/libumfpack.a $(BaseDir)AMD/Lib/libamd.a $(BaseDir)SuiteSparse_config/libsuitesparseconfig.a
all: TDS.o TDSJac.o ExtraRoutines.o CalcVFC.o TDS.h
$(CC) $(Include) $(Lib) $(AddFiles) -dynamiclib -lpthread -o libTDS.so $^ -lm -g $(StaticLibs)
TDS.o: TDS.c TDS.h
$(CC) $(Include) $(CFLAGS) $^
TDSJac.o: TDSJac.c TDS.h
$(CC) $(CFLAGS) $^
ExtraRoutines.o: ExtraRoutines.c TDS.h
$(CC) $(CFLAGS) $^
CalcVFC.o: CalcVFC.c TDS.h
$(CC) $(CFLAGS) $^
MexFile: TDSGateway.c
mex -g -largeArrayDims -ldl TDSGateway.c
Move:
mv libTDS.so ../../
mv TDSGateway.mexmaci64 ../../
ここで行うことは次のとおりです。 1) 、、、、のみをコンパイルしてTDS.c
、対応する 4 つのオブジェクト ファイルを作成します。2) オブジェクト ファイルをマージし、次のコマンドを使用して共有ライブラリを作成します。TDSJac.c
ExtraRoutines.c
CalcVFC.c
clang -I(Some folders) -L(Some folders) -l(Some libraries) -shared -lpthread -o libTDS.so TDS.o TDSJac.o ExtraRoutines.o CalcVFC.o TDS.h -lm -g
clang: error: cannot specify -o when generating multiple output files
私はclangにまったく慣れていないので、Makefileの何が問題なのかわかりません。( に置き換えるCC=clang
とCC=gcc
、すべて正常に動作します。) インターネットで検索しましたが、うまくいきませんでした。clang のマニュアル ページには、共有ライブラリについては何も書かれていません。clangホームページからは何も取得できませんでした。この問題を回避するのを手伝っていただければ幸いです。
事前にご協力いただきありがとうございます。