c语言中同工程不同路径下的c文件函数调用的问题

davidfun1990 2017-03-16 04:38:39
今天修改代码时遇到一些问题,同一工程的某个子目录中的A.c文件想要调用根目录下的某个B.c文件中的函数,但是出现了链接错误。

仔细分析了下代码,确认了一下一些内容
(1)B.h中对于需要调用的函数做出了声明。

extern BOOL IsSingleMode();

(2)B.c中对于该函数也进行了实现。

BOOL IsSingleMode()
{
return bSingleMode;
}

(3)A.c中包含了B.h头文件

#include "..\B.h"

结果出现了如下的错误:

option_setting.obj : error LNK2001: unresolved external symbol _bSingleMode

百思不得其解,上网查资料之后发现该问题是非常常见的一种错误,但是网上对于解决方法的说明大多过于抽象。对于该问题,还有一个比较奇特的现象:同样有一个宏定义的参数(非函数)能够实现调用而不出错。

咨询了同事,他给的理由是生成B.c所在的路径生成的是exe,A.c所在的路径生成的是dll文件。我们的程序是先编译A.c所在的dll,然后再编译B.c,所以B.c无法调用A.c,但是反过来可以调用。

不知道他说的有没有道理,而且就算他说的是正确的,但是为什么宏定义的参数可以实现调用,而函数,全局变量等却不能实现调用呢?
望各位大神解答疑惑,感激不尽。
...全文
958 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-03-17
  • 打赏
  • 举报
回复
源/头文件保存在哪个文件夹下 和 源/头文件被添加到哪个项目的源文件下 不是一回事!
zilaishuichina 2017-03-16
  • 打赏
  • 举报
回复
引用 10 楼 davidfun1990 的回复:
源文件的位置是不能动的,找到一些资料
反过来用可以吗?即库项目中的源文件想要调用可执行文件项目中的源文件中的函数


1、没有让你改源文件的位置

也就是说,
A.c那个项目,引用B.h和 B.c。
B.c那个项目,也引用B.h和 B.c,这两个项目用的是同一个路径下的文件

2、反过来可以,方法见1
davidfun1990 2017-03-16
  • 打赏
  • 举报
回复
源文件的位置是不能动的,找到一些资料 反过来用可以吗?即库项目中的源文件想要调用可执行文件项目中的源文件中的函数
zilaishuichina 2017-03-16
  • 打赏
  • 举报
回复
把B.h, B.c 加到 A.c所在的那个项目里面去
zilaishuichina 2017-03-16
  • 打赏
  • 举报
回复
你返回的这个 bSingleMode 是定义在哪里的?
davidfun1990 2017-03-16
  • 打赏
  • 举报
回复
不好意思忘了 两个c文件分别属于不同的project
赵4老师 2017-03-16
  • 打赏
  • 举报
回复
好赖也截个FileView图贴上来吧:
davidfun1990 2017-03-16
  • 打赏
  • 举报
回复
试过了,添加了..\一样的问题,其实文件里面已经由同样的案例,只不过调用的是宏定义的参数,没有问题,但是想要调用函数和变量的时候有问题,难道真的是像我同事说的那样,有先后顺序之说么?
zilaishuichina 2017-03-16
  • 打赏
  • 举报
回复
6.0么 应该是 Project Setting > C/C++ (Category:Preprocessor)> Additional include directories
davidfun1990 2017-03-16
  • 打赏
  • 举报
回复
指的是哪一个?
zilaishuichina 2017-03-16
  • 打赏
  • 举报
回复
你项目的附加包含目录里面,需要包含 ../

赵4老师 2017-03-16
  • 打赏
  • 举报
回复
将extern删掉 将B.c和A.c都添加到项目中

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧