链接库并在makefile中指定路径

时间:2010-01-20 10:12:51

标签: c

  

可能重复:
  Linking apache libraries

gcc 4.4.2 c89

我正在尝试在头文件中链接一些标头和库。但由于某些原因,我的程序似乎没有链接。

我的目录是src / include / apr src / libs

我编译了库并将它们放在我的库中,并将标题放在include目录中。

我的可执行文件位于src目录中。

在我的makefile中,我指定了这个:

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

LIBS = -libapr-1

所以执行可执行文件的当前目录。

在我的lib文件夹中,我有以下名为:

的库
libapr-1.so

在我的include / 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 / bin / ld:找不到-lapr

生成文件:

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

4 个答案:

答案 0 :(得分:2)

这与库无关,可能与路径无关。编译器认为在指定的行上存在语法错误 - 请使用复制和粘贴发布该行及其周围的行。

答案 1 :(得分:1)

修复代码中的语法错误后,您需要将LIBS更改为包含-lapr-1,因为链接器本身会添加“lib”前缀。

答案 2 :(得分:1)

编译器很可能不知道apr_int32_t的含义,而应该知道。你应该发布apr.h的第285行。

编辑:我想当你说:

  

在我的include/apr文件夹中,我有以下头文件: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目录中包含本地源和目录。

答案 3 :(得分: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的声明(...)< / p>