使用我自己的库:函数的隐式声明
Using my own library : implicit declaration of function
首先,我想提前感谢您抽出时间来帮助我。如果我可以建议你,你可以尝试重现我的问题。如果您觉得它不会帮助您理解我的问题,请不要尝试阅读 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;
}
我的项目
我添加了我的图书馆作为参考:
Project Properties - C/C Generals - Paths and Symbols - References (tab) - Check off mylib (Active)
foo.c
#include <stdlib.h>
int main(int argc, char **argv) {
return foo();
}
问题
我在构建时收到 函数的隐式声明 'foo' [-Wimplicit-function-declaration] 警告我的项目。 此警告仅在我构建项目时出现,而我的库项目没有任何内容可构建(因为它自上次构建以来未被修改)。
控制台输出
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"
..\src\uselib.c: In function 'main':
..\src\uselib.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++/生成器设置下)
解决方案
我必须在 foo.c
中包含我的 header
#include "../src/mylib.h"
由于我的项目结构,路径有点奇怪:
我的项目
- 来源
- foo.c
mylib
- 来源
- mylib.c
- mylib.h
感谢 user590028 帮助我度过难关!
在 foo.c 中您忘记包含 mylib.h header
/* 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 行后编译正确,不需要手动编译。
首先,我想提前感谢您抽出时间来帮助我。如果我可以建议你,你可以尝试重现我的问题。如果您觉得它不会帮助您理解我的问题,请不要尝试阅读 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;
}
我的项目
我添加了我的图书馆作为参考:
Project Properties - C/C Generals - Paths and Symbols - References (tab) - Check off mylib (Active)
foo.c
#include <stdlib.h>
int main(int argc, char **argv) {
return foo();
}
问题
我在构建时收到 函数的隐式声明 'foo' [-Wimplicit-function-declaration] 警告我的项目。 此警告仅在我构建项目时出现,而我的库项目没有任何内容可构建(因为它自上次构建以来未被修改)。
控制台输出
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"
..\src\uselib.c: In function 'main':
..\src\uselib.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++/生成器设置下)
解决方案
我必须在 foo.c
中包含我的 header#include "../src/mylib.h"
由于我的项目结构,路径有点奇怪:
我的项目
- 来源
- foo.c
- 来源
mylib
- 来源
- mylib.c
- mylib.h
- 来源
感谢 user590028 帮助我度过难关!
在 foo.c 中您忘记包含 mylib.h header
/* 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 行后编译正确,不需要手动编译。