V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
moxiaotiao
V2EX  ›  问与答

linux 环境下编译 C 语言遇到头文件不存在的问题

  •  
  •   moxiaotiao · 2015-02-24 22:14:05 +08:00 · 3351 次点击
    这是一个创建于 3561 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有3个程序文件夹,分别是
    flowcalc
    libflowcalc
    libpjf
    当在Linux环境下gcc 编译flowcalc程序文件夹里的任何一个.C文件时候都会提示libpjf程序文件夹下面的main.h和lib.h不存在,同样编译libflowcalc程序文件夹里的任何一个.C文件时候也都会提示libpjf程序文件夹下面的main.h和lib.h不存在,关键是在程序执行前,我已经对libpjf里的makefile文件sudo make了,但是编译的时候还是提示这样的错误。

    例如:
    $ gcc -c flowcalc.c
    flowcalc.c:17:25: 致命错误: libpjf/main.h:没有那个文件或目录
    编译中断。

    9 条回复    2015-02-25 22:08:18 +08:00
    yksoft1
        1
    yksoft1  
       2015-02-24 22:18:34 +08:00
    加一个 -I../libpjf/include 之类 参数看看
    moxiaotiao
        2
    moxiaotiao  
    OP
       2015-02-24 23:25:23 +08:00
    @yksoft1 按你说的办法,可以生成.o文件了,但是直接执行./*.o文件提示无法执行二进制文件
    yksoft1
        3
    yksoft1  
       2015-02-24 23:29:53 +08:00
    @moxiaotiao 加一个ld,输入你所有的o试试看
    pathletboy
        4
    pathletboy  
       2015-02-24 23:43:19 +08:00
    把-c参数去了,-c是只编译,不链接。
    moxiaotiao
        5
    moxiaotiao  
    OP
       2015-02-25 21:02:01 +08:00
    @yksoft1 你好,我在生成libflowcalc.so库文件时候执行makefile中的命令

    g++ libflowcalc.c -o libflowcalc.so -shared -lpjf -lpcre -ltrace -lflowmanager

    提示下面错误,不晓得什么意思

    libflowcalc.c: 在函数‘void flow_summarize(lfc*, lfc_ext*)’中:
    libflowcalc.c:40:14: 警告: ‘void *’型指针用在了算术表达式中 [-Wpointer-arith]
    libflowcalc.c: 在函数‘void per_packet(lfc*, libtrace_packet_t*)’中:
    libflowcalc.c:228:14: 警告: ‘void *’型指针用在了算术表达式中 [-Wpointer-arith]
    yksoft1
        6
    yksoft1  
       2015-02-25 21:02:58 +08:00
    @moxiaotiao 这几行不是错误啊,
    moxiaotiao
        7
    moxiaotiao  
    OP
       2015-02-25 21:06:58 +08:00
    @yksoft1 意思是这个警告不影响.so库文件的生成?
    moxiaotiao
        8
    moxiaotiao  
    OP
       2015-02-25 21:11:28 +08:00
    @yksoft1 我把定位错误的两段C++代码copy出来了,帮我看一下哪个地方出问题了,谢谢

    static void flow_summarize(struct lfc *lfc, struct lfc_ext *le)
    {
    struct lfc_plugin *lp;
    void *ptr;

    if (le->done) return;

    ptr = le->data;
    tlist_reset(lfc->plugins);

    while ((lp = (struct lfc_plugin *) tlist_iter(lfc->plugins))) {
    if (lp->flowcb)
    lp->flowcb(lfc, lp->pdata, &le->lf, ptr);

    ptr += lp->datalen;
    }

    le->done = true;
    }




    struct lfc_plugin *lp;
    void *ptr;

    ptr = le->data;
    tlist_reset(lfc->plugins);
    while ((lp = (struct lfc_plugin *) tlist_iter(lfc->plugins))) {
    if (lp->pktcb)
    lp->pktcb(lfc, lp->pdata, lf, ptr, ts, up, is_new, pkt);
    ptr += lp->datalen;
    }

    lf->ts_last = ts;
    moxiaotiao
        9
    moxiaotiao  
    OP
       2015-02-25 22:08:18 +08:00
    @yksoft1 谢谢你啊,整个程序调试成功了,那个确实是个警告,不影响程序的库的生成。再次3Q。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   976 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 19:17 · PVG 03:17 · LAX 11:17 · JFK 14:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.