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