2010-01-20 34 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的声明(...)