使用makefile为大型C项目构建dll

使用makefile为大型C项目构建dll,c,dll,makefile,dllexport,umfpack,C,Dll,Makefile,Dllexport,Umfpack,我正在尝试构建使用UMFPACK库的简单dll 这是我的文件“umfsolver.c”: 我使用了变量: CF = -O3 -fexceptions -fPIC CC = cc LIB = -lm -lrt UMFPACK_CONFIG = -DNBLAS -LD:/SuiteSparseBuild/UMFPACK/Lib -lsuitesparseconfig -lrt MAKE = make CUBLAS_LIB = CUDART_LIB = XERBLA = BLAS = LAPA

我正在尝试构建使用UMFPACK库的简单dll

这是我的文件“umfsolver.c”:

我使用了变量:

CF = -O3 -fexceptions -fPIC
CC = cc
LIB = -lm -lrt
UMFPACK_CONFIG = -DNBLAS -LD:/SuiteSparseBuild/UMFPACK/Lib -lsuitesparseconfig -lrt
MAKE = make
CUBLAS_LIB = 
CUDART_LIB = 
XERBLA = 
BLAS = 
LAPACK = 
METIS_PATH = ../../metis-4.0
METIS = ../../metis-4.0/libmetis.a
它构建时没有错误。当我从另一个程序调用函数
create
时(使用静态dllimport),它会一直工作,直到需要在
create
中调用某个库函数为止

当程序调用
printf(“Creating…\n”)
umfpack\u di\u defaults(prob->Control)
时,程序似乎进入无限循环

当我键入make时,我得到以下信息:

cc    -O3 -fexceptions -fPIC -DNBLAS -LD:/SuiteSparseBuild/UMFPACK/Lib -lsuitesparseconfig -lrt   -I../Include -I../../AMD/Include -I../../SuiteSparse_config -c -DBUILD_DLL umfsolver.c
cc1: warning: fPIC ignored for target (all code is position independent)
cc    -O3 -fexceptions -fPIC -DNBLAS -LD:/SuiteSparseBuild/UMFPACK/Lib -lsuitesparseconfig -lrt   -I../Include -I../../AMD/Include -I../../SuiteSparse_config -shared -o umfsolver.dll umfsolver.o ../Lib/libumfpack.a ../../AMD/Lib/libamd.a ../../SuiteSparse_config/libsuitesparseconfig.a ../../CHOLMOD/Lib/libcholmod.a ../../COLAMD/Lib/libcolamd.a ../../metis-4.0/libmetis.a ../../CCOLAMD/Lib/libccolamd.a ../../CAMD/Lib/libcamd.a     -lm -lrt ../../CHOLMOD/Lib/libcholmod.a ../../COLAMD/Lib/libcolamd.a ../../metis-4.0/libmetis.a ../../CCOLAMD/Lib/libccolamd.a ../../CAMD/Lib/libcamd.a    -Wl,--add-stdcall-alias
我想我应该以某种方式更改makefile以将所有库文件放在一起? 我该怎么做?有人能给我解释一下吗


谢谢

Std警告:不要强制转换malloc return。每次调用malloc都需要检查返回值(!=NULL),以确保操作成功。在调用了某些malloc并且函数create()最终返回NULL的情况下,存在内存泄漏,除非所有malloc的内存(在返回NULL之前)都传递给free()。注意:如果所有内存指针最初都设置为NULL,那么为每个指针调用free()就像将NULL传递给free()一样容易可以。发布的makefile中引用了很多宏定义,但我看不到这些宏是在哪里定义的。发布的makefile中有一些目标不是实际文件。这些目标必须是“.PHONY:statement”的一部分,比如“.PHONY:libs”all@LPs,OP返回时未释放对malloc的未失败调用
CF = -O3 -fexceptions -fPIC
CC = cc
LIB = -lm -lrt
UMFPACK_CONFIG = -DNBLAS -LD:/SuiteSparseBuild/UMFPACK/Lib -lsuitesparseconfig -lrt
MAKE = make
CUBLAS_LIB = 
CUDART_LIB = 
XERBLA = 
BLAS = 
LAPACK = 
METIS_PATH = ../../metis-4.0
METIS = ../../metis-4.0/libmetis.a
cc    -O3 -fexceptions -fPIC -DNBLAS -LD:/SuiteSparseBuild/UMFPACK/Lib -lsuitesparseconfig -lrt   -I../Include -I../../AMD/Include -I../../SuiteSparse_config -c -DBUILD_DLL umfsolver.c
cc1: warning: fPIC ignored for target (all code is position independent)
cc    -O3 -fexceptions -fPIC -DNBLAS -LD:/SuiteSparseBuild/UMFPACK/Lib -lsuitesparseconfig -lrt   -I../Include -I../../AMD/Include -I../../SuiteSparse_config -shared -o umfsolver.dll umfsolver.o ../Lib/libumfpack.a ../../AMD/Lib/libamd.a ../../SuiteSparse_config/libsuitesparseconfig.a ../../CHOLMOD/Lib/libcholmod.a ../../COLAMD/Lib/libcolamd.a ../../metis-4.0/libmetis.a ../../CCOLAMD/Lib/libccolamd.a ../../CAMD/Lib/libcamd.a     -lm -lrt ../../CHOLMOD/Lib/libcholmod.a ../../COLAMD/Lib/libcolamd.a ../../metis-4.0/libmetis.a ../../CCOLAMD/Lib/libccolamd.a ../../CAMD/Lib/libcamd.a    -Wl,--add-stdcall-alias