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

2015-02-24 22:14:05 +08:00
 moxiaotiao

有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:没有那个文件或目录
编译中断。

3246 次点击
所在节点    问与答
9 条回复
yksoft1
2015-02-24 22:18:34 +08:00
加一个 -I../libpjf/include 之类 参数看看
moxiaotiao
2015-02-24 23:25:23 +08:00
@yksoft1 按你说的办法,可以生成.o文件了,但是直接执行./*.o文件提示无法执行二进制文件
yksoft1
2015-02-24 23:29:53 +08:00
@moxiaotiao 加一个ld,输入你所有的o试试看
pathletboy
2015-02-24 23:43:19 +08:00
把-c参数去了,-c是只编译,不链接。
moxiaotiao
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
2015-02-25 21:02:58 +08:00
@moxiaotiao 这几行不是错误啊,
moxiaotiao
2015-02-25 21:06:58 +08:00
@yksoft1 意思是这个警告不影响.so库文件的生成?
moxiaotiao
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
2015-02-25 22:08:18 +08:00
@yksoft1 谢谢你啊,整个程序调试成功了,那个确实是个警告,不影响程序的库的生成。再次3Q。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/172549

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX