簡體   English   中英

C程序中未定義的引用

[英]undefined reference in c program

我編寫了一組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文件中的函數。 請給我一個解決方案。 先感謝您! :)

抱歉,您的問題只有部分信息,還沒有提供您如何進行編譯/鏈接。

解決這個問題的方法很多,我嘗試提出一些方法:一種:對於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  

第二:在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)

希望您能學到一些東西,謝謝您的教學。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM