2014-12-13 98 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) 

希望你學到一些東西,感謝機會教。