2010-01-20 62 views
0

Possible Duplicate:
Linking apache libraries連接libaries和makefile文件

GCC指定路徑4.4.2 C89

我想在我的頭文件中的一些頭文件和庫鏈接。但由於某種原因,我的程序似乎沒有鏈接。

我在我的src目錄/包括/ APR的src /庫

我編寫的庫,把它們在我的庫和我已經把標題中包含目錄。

我的可執行文件位於src目錄中。

在我的makefile我已經指定了這一點:

LIBS_PATH -L./lib 
INC_PATH -I./include 

LIBS = -libapr-1 

所以當前目錄中可執行文件的執行。

在我的lib文件夾我已經叫下面的庫:

libapr-1.so 

在我包括/ APR文件夾中,我有以下的頭文件:

apr.h 

該計劃得到頭文件。但我不認爲它是鏈接庫,因爲我沒有得到任何錯誤,說它找不到頭文件。

在我包括我也做了頭文件這個

#include <apr/apr.h> 

我得到這個以下錯誤信息:

In file included from include/apr.h:17,     
./include/apr/apr.h:285: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘apr_int32_t’ 

非常感謝您的任何建議和意見,

編輯:

LIBS_PATH -L./lib 
INC_PATH -I./include 

LIBS = -lapr 

錯誤: 在/ usr /斌/勞工處:找不到-lapr

的Makefile:

OBJECT_FILES = dlg_fsm.o 

CFLAGS = -ggdb -Wall 

FLATFORM = -DLINUX 

CC = gcc 

LIBS_PATH = -L./lib 
INC_PATH = -I./include 

LIBS = -lapr 

dlg: $(OBJECT_FILES) 
    $(CC) $(CFLAGS) $(LDFLAGS) $(OBJECT_FILES) $(FLATFORM) $(INC_PATH) $(LIBS_PATH) $(LIBS) -o dlg 
+0

您是否收到任何有關缺少頭文件的錯誤消息? – 2010-01-20 10:19:07

+0

你有一些令人困惑的文件名:include/apr.h和include/apr/apr.h - 我想知道是否會出現一些混淆?也許標題衛兵變得困惑? – 2010-01-20 10:20:40

+0

你是從你下載和編譯的目錄中建立你的庫嗎?您應該安裝apr,然後使用安裝的文件。這可能是因爲你已經安裝了舊版本的apr,並且包含錯​​誤的頭文件。 – 2010-01-20 10:36:58

回答

2

這有沒有關係庫,並可能有無關路徑。編譯器認爲在指定的行上有語法錯誤 - 請使用複製和粘貼將該行及其周圍的行發佈。

1

修正代碼中的語法錯誤後,您需要將LIBS更改爲包含-lapr-1,因爲鏈接器本身會添加「lib」前綴。

+0

是的,我修正了這個問題,這個庫叫做libapr-1.so。所以在我的makefile中,我把它叫做-lapr-1 – ant2009 2010-01-20 10:31:20

1

很可能編譯器不知道apr_int32_t是什麼意思,而它應該。您應該張貼apr.h的第285行。

編輯:我認爲當你說:

And in my include/apr folder I have the following header file: apr.h

,可能是出了什麼問題。您的本地目錄中不應有apr.h文件—這是來自APR的文件。因此,請嘗試將文件include/apr/apr.h重命名爲其他內容(除非通過include/apr表示您的系統包含目錄)。

編輯2

LIBS_PATH -L./lib 
INC_PATH -I./include 

從上面,看起來你在apr源目錄裏。請在apr目錄中輸入make install安裝apr,然後使用/usr/include/apr/usr/lib/libapr*中的已安裝文件構建程序。您不應該擁有本地來源並在apr目錄中包含目錄。

+0

我註釋掉了我得到的錯誤,但是現在我編譯出了以下錯誤:/ usr/bin/ld:can not find -lapr-1。它在尋找默認路徑。但是,是否可以鏈接我的自定義路徑,即LIBS_PATH -L.lib謝謝。 – ant2009 2010-01-20 10:46:59

+0

是的,像這樣的鏈接應該是可能的,但首先嚐試'-lapr'?那麼現在你說編譯沒有錯誤?你做了什麼?另外,在你的主帖中發佈你的更新,而不是在這裏回覆 - 讓其他人更容易遵循這篇文章。 – 2010-01-20 10:49:06

1

apr.h中可能存在語法錯誤,或者apr.h可能會在它自身之前包含某些內容。

例如:

你寫的頭文件abc.h它使用的strlen(...),但不包括內部abc.h string.h中。如果要在文件xxx.c中包含abc.h,則必須手動在abc.h之前在xxx.c中包含string.h,以確保abc.h可以訪問strlen的聲明(...)