c程序中未定义的引用

时间:2014-12-13 10:30:51

标签: c mongodb reference linker undefined

我写了一组c文件,其中这些文件中的函数用在主C文件中。我已经编写了头文件,并将它们包含在主c文件中。

以前工作正常。然后,我必须集成逻辑来从这个程序访问mongodb。所以我必须设置C_INCLUDE_PATH来引用mongoc.hbson.h等。我将其设置如下:

sanuri@ubuntu:~/Desktop/December/SMS_manager$ C_INCLUDE_PATH=.:/usr/local/include:/home/sanuri/Desktop/ETSP/mongo-c-driver-0.98.0/src/mongoc:/home/sanuri/Desktop/ETSP/mongo-c-driver-0.98.0/src/libbson/src/bson
sanuri@ubuntu:~/Desktop/December/SMS_manager$ export C_INCLUDE_PATH

现在可以识别mongoc.hbson.h。但我自己在我编写的其他C文件中的函数无法识别,它们与主C文件位于同一目录中。我收到以下错误:

/tmp/ccg5BR9V.o: In function `getDetails':
ReceiveSMS.c:(.text+0x130): undefined reference to `str_split'
ReceiveSMS.c:(.text+0x15c): undefined reference to `trimwhitespace'
/tmp/ccg5BR9V.o: In function `getMessageDetails':
ReceiveSMS.c:(.text+0xa80): undefined reference to `authenticate'
/tmp/ccg5BR9V.o: In function `main':
ReceiveSMS.c:(.text+0xbc1): undefined reference to `getNoOfCPUs'
ReceiveSMS.c:(.text+0xbca): undefined reference to `configure'

这些是我写的三个C文件中的函数。请给我一个解决方案。先感谢您! :)

1 个答案:

答案 0 :(得分:1)

很抱歉,您的问题只包含部分信息,但您尚未制作编译/链接的方式。

有很多方法可以解决这个问题,我试着提出一些: 一: 对于gcc,您可以提供-I -L -l选项

-I include directory path i.e. headers
-L library path say libc.so, libc.a etc.,
-l for library name say -lmy for saying use/link libmy.* library
ex: 
a. gcc -o myapp myapp.c -I./include -L./lib -lmy
b. gcc -o myapp myapp.c -I./include ./lib/libmy.a  

2: 在linux环境中,gcc接受CFLAGS,LDFLAGS等标志 您可以在Makefile中使用这些标志 $ cat Makefile

CC=gcc
CFLAGS=-Wall -I./include
LDFLAGS=-lmy -L./lib 

SOURCE=main.c

myapp: $(OBJECTS)
    $(CC) $(CFLAGS) $(SOURCE) -o myapp $(LDFLAGS)

希望你能学到一些东西,感谢有机会教学。