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

时间:2015-02-06 17:13:49

标签: c eclipse makefile shared-libraries multi-project

首先,我想提前感谢你,帮助我解决问题。如果我建议你,你可以尝试重现我的问题。如果您觉得它不能帮助您理解我的问题,请不要尝试阅读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-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 ++ / Builder设置下)

解决方案


我必须在foo.c中包含我的标题

#include "../src/mylib.h"

由于我的项目结构,路径有点奇怪:

  • myproject的

    • SRC
      • foo.c的
  • MYLIB

    • SRC
      • mylib.c
      • mylib.h

感谢user590028帮助我完成了这一切!

2 个答案:

答案 0 :(得分:3)

在foo.c中,你忘了包含mylib.h头文件

/* foo.c */

#include <stdlib.h>
#include "mylib.h"  /* <-- include this line */

int main(int argc, char **argv) {
    return foo();
}

答案 1 :(得分:0)

你应该包括

extern int foo();

在foo.c中

然后你可以编译:

gcc -c mylib.c
gcc mylib.o foo.c -o foo

并执行:

./foo

当你使用eclipse时,也许它在包含extern行之后编译相关,并且不需要手动编译。