对..错误的奇怪未定义引用
|
我正在尝试使用我在Wikipedia上找到的定点数学库,并从Google代码下载它。我试图通过将以下main.c文件添加到其源代码中并将其重新编译为可执行文件来编译一个简单的示例项目。
问题
gcc(实际上是使用代码块v1.0的)抱怨我对库真正定义的函数的未定义引用。一些函数可以工作,而其他函数则会生成“未定义的引用错误”,例如,这是我尝试添加到源文件中的main.c文件。
#include<stdio.h>
#include \"fixmath.h\"
int main()
{
float num1=6.25f;
float num2=2.567f;
fix16_t numfix1=fix16_from_float(num1);
fix16_t numfix2=fix16_from_float(num2);
//try out arithmetic on the fixed numbers
fix16_t simpleAdd= fix16_add(numfix1, numfix2);//(this works !!)no error
fix16_t product= fix16_smul(numfix1,numfix2);//undefined reference to \'fix16_smul\'
fix16_t quotient=fix16_sdiv(numfix1,numfix2);//undefined reference to \'fix16_sdiv\'
fix16_t sum=fix16_sadd(numfix1,numfix2);//undefined reference to \'fix16_sadd\'
fix16_t difference=fix16_ssub(numfix1,numfix2);//undefined reference to ....
//print out the results
printf(\"the product of %f * %f =%f \\n\",num1,num2,fix16_to_float(product));
printf(\"the quotient of %f and %f =%f \\n\",num1,num2,fix16_to_float(quotient));
printf(\"the sum of %f + %f =%f \\n\",num1,num2,fix16_to_float(sum));
printf(\"the difference of %f - %f =%f \\n\",num1,num2,fix16_to_float(difference));
//system(\"pause\")
printf(\"please press any key to continue ...\\n\");
getchar();
}
EDIT3://同时显示生成文件和构建日志
//build log
Project : libfixmath
Compiler : GNU GCC Compiler (called directly)
Directory : C:\\libfixmath\\
--------------------------------------------------------------------------------
Switching to target: dbg
Linking console executable: fixmathexample.exe
obj\\dbg\\main.o: In function `main\':
C:/libfixmath/main.c:14: undefined reference to `fix16_smul\'
C:/libfixmath/main.c:15: undefined reference to `fix16_sdiv\'
C:/libfixmath/main.c:16: undefined reference to `fix16_sadd\'
obj\\dbg\\main.o: In function `fix16_ssub\':
C:/libfixmath/fix16.h:51: undefined reference to `fix16_sadd\'
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 0 seconds)
4 errors, 0 warnings
//导出的make文件
###############################################################################
# Makefile automatically generated by Code::Blocks IDE #
###############################################################################
# Project: libfixmath
# Project filename: C:\\libfixmath\\libfixmath.cbp
# Compiler used: GNU GCC Compiler
### Variables used in this Makefile
dbg_CC=mingw32-gcc.exe
dbg_CPP=mingw32-g++.exe
dbg_LD=mingw32-g++.exe
dbg_LIB=ar.exe
dbg_RESCOMP=windres.exe
rel_CC=mingw32-gcc.exe
rel_CPP=mingw32-g++.exe
rel_LD=mingw32-g++.exe
rel_LIB=ar.exe
rel_RESCOMP=windres.exe
### Compiler/linker options
dbg_GLOBAL_CFLAGS=
dbg_PROJECT_CFLAGS= -DFIXMATH_NO_CACHE -DFIXMATH_NO_64BIT
dbg_GLOBAL_LDFLAGS=
dbg_PROJECT_LDFLAGS=
dbg_GLOBAL_INCS= -IC:/Program\\ Files/CodeBlocks/include
dbg_PROJECT_INCS=
dbg_GLOBAL_LIBDIRS= -LC:/Program\\ Files/CodeBlocks/lib
dbg_PROJECT_LIBDIRS= -LC:/libfixmath/lib
dbg_GLOBAL_LIBS=
dbg_PROJECT_LIBS= C:\\libfixmath\\lib\\libfixmath.a
rel_GLOBAL_CFLAGS=
rel_PROJECT_CFLAGS= -DFIXMATH_NO_CACHE -DFIXMATH_NO_64BIT
rel_GLOBAL_LDFLAGS=
rel_PROJECT_LDFLAGS=
rel_GLOBAL_INCS= -IC:/Program\\ Files/CodeBlocks/include
rel_PROJECT_INCS=
rel_GLOBAL_LIBDIRS= -LC:/Program\\ Files/CodeBlocks/lib
rel_PROJECT_LIBDIRS= -LC:/libfixmath/lib
rel_GLOBAL_LIBS=
rel_PROJECT_LIBS= C:\\libfixmath\\lib\\libfixmath.a
### Targets compiler flags
dbg_CFLAGS= $(dbg_PROJECT_CFLAGS) -Wall -g $(dbg_GLOBAL_CFLAGS)
rel_CFLAGS= $(rel_PROJECT_CFLAGS) -fexpensive-optimizations -O3 -Wall -fomit-frame-pointer $(rel_GLOBAL_CFLAGS)
### Targets linker flags
dbg_LDFLAGS= $(dbg_PROJECT_LDFLAGS) $(dbg_GLOBAL_LDFLAGS)
rel_LDFLAGS= $(rel_PROJECT_LDFLAGS) -s $(rel_GLOBAL_LDFLAGS)
### Targets include directories
dbg_INCS= $(dbg_PROJECT_INCS) $(dbg_GLOBAL_INCS)
rel_INCS= $(rel_PROJECT_INCS) $(rel_GLOBAL_INCS)
### Targets library directories
dbg_LIBDIRS= $(dbg_PROJECT_LIBDIRS) $(dbg_GLOBAL_LIBDIRS)
rel_LIBDIRS= $(rel_PROJECT_LIBDIRS) $(rel_GLOBAL_LIBDIRS)
### Targets libraries
dbg_LIBS= $(dbg_PROJECT_LIBS) $(dbg_GLOBAL_LIBS)
rel_LIBS= $(rel_PROJECT_LIBS) $(rel_GLOBAL_LIBS)
###############################################################################
# You shouldn\'t need to modify anything beyond this point #
###############################################################################
### Resources used in this Makefile
dbg_RESOURCE=
### Objects used in this Makefile
dbg_OBJS=obj/dbg/main.o
dbg_LINKOBJS=$(dbg_OBJS)
dbg_DEPS=.deps/main.d
rel_OBJS=obj/rel/main.o
rel_LINKOBJS=$(rel_OBJS)
rel_DEPS=.deps/main.d
### The targets of this project
dbg_BIN=fixmathexample.exe
rel_BIN=fixmathexample
.PHONY: all all-before all-custom all-after clean clean-custom distclean distclean-custom depend_dbg dbg-before dbg-after depend_rel rel-before rel-after
all: all-before dbg rel all-after
dist:
@zip libfixmath.cbp.zip libfixmath.cbp Makefile Makefile fix16.c fix16.h fix16_exp.c fix16_sqrt.c fix16_trig.c fixmath.h fract32.c fract32.h int64.h main.c uint32.c uint32.h
clean_dbg:
@echo Cleaning target \"dbg\"...
@$(RM) $(dbg_BIN) $(dbg_OBJS) $(dbg_RESOURCE)
distclean_dbg:
@echo Dist-cleaning target \"dbg\"...
@$(RM) $(dbg_BIN) $(dbg_OBJS) $(dbg_DEPS) $(dbg_RESOURCE)
clean_rel:
@echo Cleaning target \"rel\"...
@$(RM) $(rel_BIN) $(rel_OBJS) $(rel_RESOURCE)
distclean_rel:
@echo Dist-cleaning target \"rel\"...
@$(RM) $(rel_BIN) $(rel_OBJS) $(rel_DEPS) $(rel_RESOURCE)
clean: clean_dbg clean_rel
distclean: distclean_dbg distclean_rel
depend_dbg_DIRS:
-@if not exist \".deps\\.\" mkdir \".deps\"
depend_dbg: depend_dbg_DIRS $(dbg_DEPS)
depend_rel_DIRS:
-@if not exist \".deps\\.\" mkdir \".deps\"
depend_rel: depend_rel_DIRS $(rel_DEPS)
depend: depend_dbg depend_rel
dbg_DIRS:
-@if not exist \"obj\\.\" mkdir \"obj\"
-@if not exist \"obj\\dbg\\.\" mkdir \"obj\\dbg\"
dbg: depend_dbg dbg_DIRS dbg-before $(dbg_BIN) dbg-after
$(dbg_BIN): $(dbg_LINKOBJS) $(dbg_RESOURCE)
@echo Linking executable \"fixmathexample.exe\"...
@$(dbg_LD) $(dbg_LIBDIRS) -o $(dbg_BIN) $(dbg_LINKOBJS) $(dbg_RESOURCE) $(dbg_LDFLAGS) $(dbg_LIBS)
rel_DIRS:
-@if not exist \"obj\\.\" mkdir \"obj\"
-@if not exist \"obj\\rel\\.\" mkdir \"obj\\rel\"
rel: depend_rel rel_DIRS rel-before $(rel_BIN) rel-after
$(rel_BIN): $(rel_LINKOBJS) $(rel_RESOURCE)
@echo Linking executable \"fixmathexample\"...
@$(rel_LD) $(rel_LIBDIRS) -o $(rel_BIN) $(rel_LINKOBJS) $(rel_RESOURCE) $(rel_LDFLAGS) $(rel_LIBS)
.deps/main.d: main.c
@echo Calculating dependencies for \"main.c\"...
@$(dbg_CC) -MM $(dbg_CFLAGS) -MF .deps/main.d -MT obj/dbg/main.o,obj/rel/main.o $(dbg_INCS) main.c
obj/dbg/main.o: .deps/main.d
@echo Compiling \"main.c\"...
@$(dbg_CC) $(dbg_CFLAGS) $(dbg_INCS) -c main.c -o obj/dbg/main.o
obj/rel/main.o: main.c
@echo Compiling \"main.c\"...
@$(rel_CC) $(rel_CFLAGS) $(rel_INCS) -c main.c -o obj/rel/main.o
没有找到相关结果
已邀请:
2 个回复
社攻取墟槽
捕暑句簿姓
有效,因为它在头文件中被完全定义为
代码。