可能重复:
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
答案 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>