C++ math.h即使包含在makefile中也不包含

C++ math.h即使包含在makefile中也不包含,c++,c,makefile,automake,C++,C,Makefile,Automake,我正试图从中构建SPRO 他们使用Automake 1.6.2生成生成文件 我的问题是,当我试图做这个项目时,我得到了错误 “对‘sin’的未定义引用”等 这是错误图像 此错误是由于数学库未包含在-lm标志中,但-lm存在于makefile.am AUTOMAKE_OPTIONS = 1.4 foreign ACLOCAL_AMFLAGS = -I auxdir LDADD = -lm -L. -lspro @sphere_lib@ INCLUDES = @sphere_includ

我正试图从中构建SPRO

他们使用Automake 1.6.2生成生成文件

我的问题是,当我试图做这个项目时,我得到了错误

“对‘sin’的未定义引用”

这是错误图像

此错误是由于数学库未包含在
-lm
标志中,但
-lm
存在于
makefile.am

AUTOMAKE_OPTIONS = 1.4 foreign

ACLOCAL_AMFLAGS = -I auxdir

LDADD    = -lm -L. -lspro @sphere_lib@
INCLUDES = @sphere_include@

include_HEADERS = spro.h
lib_LIBRARIES = libspro.a
noinst_HEADERS = getopt.h

libspro_a_SOURCES = system.h spro.h sig.c spf.c header.c misc.c lpc.c   convert.c fft.c

bin_PROGRAMS = scopy slpc slpcep sfbank sfbcep
noinst_PROGRAMS = scompare

scopy_SOURCES = scopy.c getopt.c getopt1.c
scopy_DEPENDENCIES = libspro.a

slpc_SOURCES = slpc.c getopt.c getopt1.c
slpc_DEPENDENCIES = libspro.a

slpcep_SOURCES = slpcep.c getopt.c getopt1.c
slpcep_DEPENDENCIES = libspro.a

sfbank_SOURCES = sfbank.c getopt.c getopt1.c
sfbank_DEPENDENCIES = libspro.a

sfbcep_SOURCES = sfbcep.c getopt.c getopt1.c
sfbcep_DEPENDENCIES = libspro.a

scompare_SOURCES = scompare.c getopt.c getopt1.c
scompare_DEPENDENCIES = libspro.a

SUBDIRS = doc auxdir test
EXTRA_DIST = README INSTALL COPYING CHANGES
这是我的
makefile.am

AUTOMAKE_OPTIONS = 1.4 foreign

ACLOCAL_AMFLAGS = -I auxdir

LDADD    = -lm -L. -lspro @sphere_lib@
INCLUDES = @sphere_include@

include_HEADERS = spro.h
lib_LIBRARIES = libspro.a
noinst_HEADERS = getopt.h

libspro_a_SOURCES = system.h spro.h sig.c spf.c header.c misc.c lpc.c   convert.c fft.c

bin_PROGRAMS = scopy slpc slpcep sfbank sfbcep
noinst_PROGRAMS = scompare

scopy_SOURCES = scopy.c getopt.c getopt1.c
scopy_DEPENDENCIES = libspro.a

slpc_SOURCES = slpc.c getopt.c getopt1.c
slpc_DEPENDENCIES = libspro.a

slpcep_SOURCES = slpcep.c getopt.c getopt1.c
slpcep_DEPENDENCIES = libspro.a

sfbank_SOURCES = sfbank.c getopt.c getopt1.c
sfbank_DEPENDENCIES = libspro.a

sfbcep_SOURCES = sfbcep.c getopt.c getopt1.c
sfbcep_DEPENDENCIES = libspro.a

scompare_SOURCES = scompare.c getopt.c getopt1.c
scompare_DEPENDENCIES = libspro.a

SUBDIRS = doc auxdir test
EXTRA_DIST = README INSTALL COPYING CHANGES

有人能告诉我如何解决这个问题吗?

更改依赖项的顺序(如果libA需要libB中的符号,那么顺序应该是
-lA-lB
)。因此,它应该是:

LDADD    = -L. -lspro @sphere_lib@ -lm
“未定义引用”是链接时错误,而不是编译时错误(即,它与头文件无关)。您的问题是,
gcc
在遇到所需符号时只检查一次,因此需要在需要它们的对象文件之后列出链接库。(因此,您需要在链接行中的对象文件后面有
-lm
,而不是在它后面。)