链接apache库

链接apache库,c,C,通用条款4.4.2 我已经安装了ApacheRuntimePortable。4月1日至3月9日 ./configure make make test make install 一切都安装得很好 我的/usr/local/apr/lib中有以下/usr/local/apr/include/apr-1 我有一个简单的main.c程序要测试: #include <stdio.h> #include <apr.h> int main(void) { printf("

通用条款4.4.2

我已经安装了ApacheRuntimePortable。4月1日至3月9日

./configure
make
make test
make install
一切都安装得很好

我的
/usr/local/apr/lib
中有以下
/usr/local/apr/include/apr-1

我有一个简单的main.c程序要测试:

#include <stdio.h>
#include <apr.h>

int main(void)
{
    printf(" == Start of program ==\n");

    return 0;
}
但是,当我尝试编译时,会出现以下错误:

gcc -c -I/usr/local/apr/include/apr-1 -L/usr/local/apr/lib -I/usr/local/apr/include/apr-1 main.c    
In file included from main.c:3:
/usr/local/apr/include/apr-1/apr.h:285: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘apr_off_t’
make: *** [main.o] Error 1
make: Target `test_apr' not remade because of errors.
但是,我不理解这一点,因为apr-1文件夹中的头文件名为apr.h,而我链接的库名为libapr-1.so

我知道我的路径是正确的,我已经仔细检查过了。所以我不明白为什么我不能把它们联系起来


非常感谢您的建议,

这几乎是重复您之前的问题,因此我将重复我之前的回答-这不是链接器错误。您需要将包含路径传递给编译器,而不是链接器:

main.o: main.c
    $(CC) -c $(INC_PATH) main.c 

这是一个近乎重复的你以前的问题,所以我会给一个近乎重复的我以前的答案-这不是一个链接器错误。您需要将包含路径传递给编译器,而不是链接器:

main.o: main.c
    $(CC) -c $(INC_PATH) main.c 

我的水晶球告诉我,您需要运行add
-D_LARGEFILE64_SOURCE
CFLAGS
,或者如果您在linux上:命令
getconf LFS\u CFLAGS
为您提供了一个精确的
CFLAGS
列表,以添加到现有的
CFLAGS
中以获得大文件支持


最后,如果可能的话,您应该实际使用
apr-1-config--cflags
来获取编译器标志的列表。

我的水晶球告诉我,您需要运行add
-D_LARGEFILE64_SOURCE
cflags
,或者,如果您在linux上:命令
getconf LFS\u CFLAGS
为您提供了一个精确的
CFLAGS
列表,以便添加到现有的
CFLAGS
中以获得大文件支持



最后,如果可能的话,您应该实际使用
apr-1-config--cflags
来获取编译器标志的列表。

至少这个问题的形式比上一个问题好得多。实际上,我对上一个问题做了太多的更改。所以决定关闭它。在这里,我通过安装apache运行时并生成一个简单的源文件和makefile重新开始。然而,在做了Neil建议的修改后,我仍然会出错。至少这个问题比上一个问题的形式好得多。实际上,我对上一个问题做了太多的修改。所以决定关闭它。在这里,我通过安装apache运行时并生成一个简单的源文件和makefile重新开始。然而,在做出尼尔建议的更改后,我仍然会出错。@rob:我(和其他人)在几个小时前花了很多时间试图找到你的问题。现在我们回到原点。typedef off64\u t apr\u off\t;这是一条线。然而,我认为apr.h源代码不会有任何问题,因为它是apache运行时的一部分。@robUK:aha。您需要让编译器知道您正在编译大文件支持。apr.h源代码是可编译的,但只使用它应该使用的标志进行编译,而不是您想要的任何东西。我只安装了apr的旧版本,它没有off64\t类型。您不是碰巧在32位计算机上安装了64位版本的APR(反之亦然)?抓住这里的救命稻草……好吧,看来阿洛克已经发现了问题所在。未来的指针——当人们试图解决你的问题时,要求你发布代码,发布代码!如果你这么做的话,这一切可能在几个小时前就解决了。@rob:我(和其他人)在几个小时前花了很多时间试图找到你的问题。现在我们回到原点。typedef off64\u t apr\u off\t;这是一条线。然而,我认为apr.h源代码不会有任何问题,因为它是apache运行时的一部分。@robUK:aha。您需要让编译器知道您正在编译大文件支持。apr.h源代码是可编译的,但只使用它应该使用的标志进行编译,而不是您想要的任何东西。我只安装了apr的旧版本,它没有off64\t类型。您不是碰巧在32位计算机上安装了64位版本的APR(反之亦然)?抓住这里的救命稻草……好吧,看来阿洛克已经发现了问题所在。未来的指针——当人们试图解决你的问题时,要求你发布代码,发布代码!如果你这么做的话,这一切可能在几个小时前就解决了。看起来你的水晶球是对的。目前我正在linux 32位上编译。然而,我不可能知道要添加到CFLAGS中的-D_LARGEFILE64_源代码。我想这只是经验的问题。命令LFS\u CFLAGS确实给了我要添加的标志列表。然而,apr-1-config--cflags只给了我-pthread。是否正确?@rob:使用getconf命令和-pthread的输出。正如Neil所说,这个问题应该在几个小时前就解决了,如果你在被问到之前就发布了代码的话。我认为
apr-1-config--cppflags
可能是打印C预处理器标志的命令。也试试。谢谢你的帮助。这似乎是个愚蠢的问题。但是,所有库都有-config命令运行,这样您就可以始终知道在make文件中包含什么了吗?@rob:这不是一个正式的标准,尽管许多程序都提供了这样的
-config
命令。对于其他一些人来说,
pkg-config
起作用。但这在很大程度上取决于程序使用哪种方法,如果有的话。看起来你的水晶球是对的。目前我正在linux 32位上编译。然而,我不可能知道要添加到CFLAGS中的-D_LARGEFILE64_源代码。我想这只是经验的问题。命令LFS\u CFLAGS确实给了我要添加的标志列表。然而,apr-1-config--cflags只给了我-pthread。是否正确?@rob:使用getconf命令和-pthread的输出。正如Neil所说,这个问题应该在几个小时前就解决了,如果你在被问到之前就发布了代码的话。我