2014-12-13 101 views
0

我编写了一组c文件,其中这些文件中的函数用于主C文件中。我写了头文件,并将它们包含在主C文件中。c程序中未定义的引用

之前它工作正常。然后,我必须整合逻辑才能从这个程序访问mongodb。因此,我不得不设置C_INCLUDE_PATHmongoc.hbson.h,等我将它设置如下:

[email protected]:~/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 
[email protected]:~/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文件,我写的功能。请给我一个解决方案。先谢谢你! :)

+0

未定义的引用是您未链接定义这些符号的库的链接器问题。 – Jasen 2014-12-13 10:35:34

回答

1

对不起,你的问题只有部分信息,你还没有产生你如何编译/链接。

有解决这个的许多方面,我尝试把一些: 一个: 海合会可以提供-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 

二: 在linux下ENVIRON GCC接受标志像CFLAGS,LDFLAGS 你可以在你的Makefile $猫的Makefile

使用这些标志
CC=gcc 
CFLAGS=-Wall -I./include 
LDFLAGS=-lmy -L./lib 

SOURCE=main.c 

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

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