C 链接库并在makefile中指定路径

C 链接库并在makefile中指定路径,c,C,可能重复: 通用条款4.4.2 c89 我正在尝试链接头文件中的一些头和库。但由于某些原因,我的程序似乎没有链接 我的目录中有src/include/apr src/libs 我已经编译了这些库并将它们放在我的libs中,我已经将头放在include目录中 我的可执行文件在src目录中 在我的makefile中,我指定了以下内容: LIBS_PATH -L./lib INC_PATH -I./include LIBS = -libapr-1 因此,执行可执行文件的当前目录 在我的lib文件

可能重复:

通用条款4.4.2 c89

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

我的目录中有src/include/apr src/libs

我已经编译了这些库并将它们放在我的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>
非常感谢您的建议和建议

编辑:

错误: /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

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

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

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

一旦修复了代码中的语法错误,您将希望更改LIBS以包含
-lapr-1
,因为链接器添加了“lib”前缀本身。

很可能编译器不知道
apr\u int32\t
的含义,而它应该知道。您应该发布
apr.h
的第285行

编辑:我想当你说:

在我的
include/apr
文件夹中,我有以下头文件:
apr.h

这可能就是问题所在。您的本地目录中不应该有
apr.h
文件,它是来自apr的文件。因此,请尝试将文件
include/apr/apr.h
重命名为其他文件(除非
include/apr
指的是您的系统包含目录)

编辑2:


从上面看,您似乎位于
apr
源目录中。请通过在
apr
目录中键入
makeinstall
来安装
apr
,然后使用
/usr/include/apr
/usr/lib/libapr*
中安装的文件来构建程序。您不应该拥有本地源代码,并且在
apr
目录中包含目录。

很可能编译器不知道
apr\u int32\t
的含义,而应该知道。您应该发布
apr.h
的第285行

编辑:我想当你说:

在我的
include/apr
文件夹中,我有以下头文件:
apr.h

这可能就是问题所在。您的本地目录中不应该有
apr.h
文件,它是来自apr的文件。因此,请尝试将文件
include/apr/apr.h
重命名为其他文件(除非
include/apr
指的是您的系统包含目录)

编辑2:


从上面看,您似乎位于
apr
源目录中。请通过在
apr
目录中键入
makeinstall
来安装
apr
,然后使用
/usr/include/apr
/usr/lib/libapr*
中安装的文件来构建程序。您不应该在
apr
目录中包含本地源代码和目录。

apr.h中存在语法错误,或者可能是apr.h希望在其自身之前包含某些内容

例如:


您可以编写头文件abc.h,它使用strlen(…),但不在abc.h中包含string.h。如果要在文件xxx.c中包含abc.h,则必须手动在abc.h之前在xxx.c中包含string.h,以确保abc.h能够访问strlen(…)的声明。

apr.h中存在语法错误,或者apr.h可能希望在其自身之前包含某些内容

例如:


您可以编写头文件abc.h,它使用strlen(…),但不在abc.h中包含string.h。如果要在文件xxx.c中包含abc.h,必须手动在abc.h之前在xxx.c中包含string.h,以确保abc.h可以访问strlen(…)的声明

您以前是否收到过有关缺少头文件的错误消息?您有一些混淆的文件名:include/apr.h和include/apr/apr.h-我想知道是否有混淆?可能是头保护程序被搞糊涂了?您是从下载和编译apr的目录中构建库的吗?您应该安装apr,然后使用已安装的文件。可能是您已经安装了旧版本的apr,并且包含了错误的头文件。@robUK:您安装了libapr吗?如何在makefile中链接?试试
LIBS=“-L./lib-lapr-1”
,或者
LIBS=“-L./lib-lapr”
。我做了什么,也许这是我的错误。但是我没有安装apr。我只是将库复制到我的/src/lib文件夹,并将标题复制到我的src/include/apr文件夹。我想把库和标题放在那些文件夹里。我应该能够链接。然而,我不知道为什么我会得到“错误:/usr/bin/ld:找不到-lapr。该库位于我的src/lib文件夹中,不在其他地方。感谢您的支持。您以前收到过关于缺少头文件的错误消息吗?您有一些混淆的文件名:include/apr.h和include/apr/apr.h-我想知道是否有一些混淆?也许是头球后卫搞糊涂了?你在建你的图库吗
LIBS_PATH -L./lib
INC_PATH -I./include

LIBS = -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
LIBS_PATH -L./lib
INC_PATH -I./include