我写了一组c文件,其中这些文件中的函数用在主C文件中。我已经编写了头文件,并将它们包含在主c文件中。
以前工作正常。然后,我必须集成逻辑来从这个程序访问mongodb。所以我必须设置C_INCLUDE_PATH
来引用mongoc.h
和bson.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.h
和bson.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文件中的函数。请给我一个解决方案。先感谢您! :)
答案 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)
希望你能学到一些东西,感谢有机会教学。