首先,我想提前感谢您抽出时间来帮助我。如果我可以建议你,你可以试着重现我的问题。如果你觉得makefile不能帮助你理解我的问题,就不要试图阅读它。
此外,我想指出的是,我做了很多研究,但没有找到任何解决方案
我的环境
- Eclipse(带CDT)
- Windows(cygwin)(但我也在Ubuntu上尝试过)
我想在项目中使用我自己的(共享)库。
我的设置
我的共享库
mylib.h
#ifndef MYLIB_H_
#define MYLIB_H_
extern int foo();
#endif /* MYLIB_H_ */
mylib.c
#include "mylib.h"
extern int foo() {
return 1;
}
我的项目
我添加了我的图书馆作为参考:
项目属性-C/C常规-路径和符号-参考(选项卡)-检查mylib(活动)
foo.c
#include <stdlib.h>
int main(int argc, char **argv) {
return foo();
}
问题
当我构建项目时,我收到函数"foo"的隐式声明[-Wimplicit函数声明]警告只有当我在库项目没有任何内容要构建的情况下构建项目时,才会出现此警告(因为自上次构建以来尚未对其进行修改)。
控制台输出
Info: Internal Builder is used for build
gcc -std=c99 "-ID:\Users\cmourgeo\maximo workspace\mylib" -O0 -g3 -Wall -c -fmessage-length=0 -o "src\uselib.o" "..\src\uselib.c"
..srcuselib.c: In function 'main':
..srcuselib.c:12:2: warning: implicit declaration of function 'foo' [-Wimplicit-function-declaration]
return foo();
^
gcc "-LD:\Users\cmourgeo\maximo workspace\mylib\Debug" -o uselib.exe "src\uselib.o" -lmylib
我应该提供eclipse自己的makefile吗?(在C/C++/Builder设置下)
解决方案
我不得不在foo.c 中包含我的头
#include "../src/mylib.h"
由于我的项目结构,路径有点奇怪:
myproject
- src
- foo.c
- src
mylib
- src
- mylib.c
- mylib.h
- src
感谢user590028帮助我度过难关!
在foo.c中,您忘记包含mylib.h标头
/* foo.c */
#include <stdlib.h>
#include "mylib.h" /* <-- include this line */
int main(int argc, char **argv) {
return foo();
}
您应该包括
extern int foo();
在foo.c 中
然后你可以编译:
gcc -c mylib.c
gcc mylib.o foo.c -o foo
并执行:
./foo
当您使用eclipse时,它可能会在包含extern行之后编译corret,而不需要手动编译。