c-使用我自己的库:函数的隐式声明



首先,我想提前感谢您抽出时间来帮助我。如果我可以建议你,你可以试着重现我的问题。如果你觉得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
  • mylib

    • src
      • mylib.c
      • mylib.h

感谢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,而不需要手动编译。

最新更新