一个工程中的多个源文件如何组合

suwhut 2015-08-23 09:43:07
因为工程有点大,得分几个模块,所以就产生了几个源文件,如何把他们组合在一起呢?
...全文
507 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
fefe82 2015-08-25
  • 打赏
  • 举报
回复
引用 16 楼 suwhut 的回复:
[quote=引用 15 楼 fefe82 的回复:] [quote=引用 14 楼 fefe82 的回复:] [quote=引用 13 楼 suwhut 的回复:] [quote=引用 12 楼 fefe82 的回复:] [quote=引用 11 楼 suwhut 的回复:] [quote=引用 6 楼 fefe82 的回复:] [quote=引用 楼主 suwhut 的回复:] 因为工程有点大,得分几个模块,所以就产生了几个源文件,如何把他们组合在一起呢?
操作系统是啥?编译器是啥? 实在搞不定的话,就 copy paste 到一个源文件里[/quote] 我编译时,都没有问题,但是链接时,就会出现某些函数不能识别error LNK2001: unresolved external symbol "void __cdecl search_book_by_isbn(void)" (?search_book_by_isbn@@YAXXZ),而且全都是没有参数的函数,有参数的函数则可以识别,感觉问题不是太大。[/quote] 这个函数是你的源文件里定义的嘛?不是的话,你应该缺少了一些库。[/quote] 是在无main函数的源文件里定义的,出错是什么原因呢?[/quote] 链接的时候没有加入包含定义的源文件生成的目标文件(.o/.obj)[/quote] 你把所有的文件都加到工程中去了嘛?[/quote] 添加不进去,我一添加,程序就出错,最后整个程序都必须关闭了。[/quote] 重装编译器 / 重装系统 / 换个编译器版本 / 换台机器
suwhut 2015-08-25
  • 打赏
  • 举报
回复
引用 15 楼 fefe82 的回复:
[quote=引用 14 楼 fefe82 的回复:] [quote=引用 13 楼 suwhut 的回复:] [quote=引用 12 楼 fefe82 的回复:] [quote=引用 11 楼 suwhut 的回复:] [quote=引用 6 楼 fefe82 的回复:] [quote=引用 楼主 suwhut 的回复:] 因为工程有点大,得分几个模块,所以就产生了几个源文件,如何把他们组合在一起呢?
操作系统是啥?编译器是啥? 实在搞不定的话,就 copy paste 到一个源文件里[/quote] 我编译时,都没有问题,但是链接时,就会出现某些函数不能识别error LNK2001: unresolved external symbol "void __cdecl search_book_by_isbn(void)" (?search_book_by_isbn@@YAXXZ),而且全都是没有参数的函数,有参数的函数则可以识别,感觉问题不是太大。[/quote] 这个函数是你的源文件里定义的嘛?不是的话,你应该缺少了一些库。[/quote] 是在无main函数的源文件里定义的,出错是什么原因呢?[/quote] 链接的时候没有加入包含定义的源文件生成的目标文件(.o/.obj)[/quote] 你把所有的文件都加到工程中去了嘛?[/quote] 添加不进去,我一添加,程序就出错,最后整个程序都必须关闭了。
fefe82 2015-08-25
  • 打赏
  • 举报
回复
引用 14 楼 fefe82 的回复:
[quote=引用 13 楼 suwhut 的回复:] [quote=引用 12 楼 fefe82 的回复:] [quote=引用 11 楼 suwhut 的回复:] [quote=引用 6 楼 fefe82 的回复:] [quote=引用 楼主 suwhut 的回复:] 因为工程有点大,得分几个模块,所以就产生了几个源文件,如何把他们组合在一起呢?
操作系统是啥?编译器是啥? 实在搞不定的话,就 copy paste 到一个源文件里[/quote] 我编译时,都没有问题,但是链接时,就会出现某些函数不能识别error LNK2001: unresolved external symbol "void __cdecl search_book_by_isbn(void)" (?search_book_by_isbn@@YAXXZ),而且全都是没有参数的函数,有参数的函数则可以识别,感觉问题不是太大。[/quote] 这个函数是你的源文件里定义的嘛?不是的话,你应该缺少了一些库。[/quote] 是在无main函数的源文件里定义的,出错是什么原因呢?[/quote] 链接的时候没有加入包含定义的源文件生成的目标文件(.o/.obj)[/quote] 你把所有的文件都加到工程中去了嘛?
fefe82 2015-08-25
  • 打赏
  • 举报
回复
引用 13 楼 suwhut 的回复:
[quote=引用 12 楼 fefe82 的回复:] [quote=引用 11 楼 suwhut 的回复:] [quote=引用 6 楼 fefe82 的回复:] [quote=引用 楼主 suwhut 的回复:] 因为工程有点大,得分几个模块,所以就产生了几个源文件,如何把他们组合在一起呢?
操作系统是啥?编译器是啥? 实在搞不定的话,就 copy paste 到一个源文件里[/quote] 我编译时,都没有问题,但是链接时,就会出现某些函数不能识别error LNK2001: unresolved external symbol "void __cdecl search_book_by_isbn(void)" (?search_book_by_isbn@@YAXXZ),而且全都是没有参数的函数,有参数的函数则可以识别,感觉问题不是太大。[/quote] 这个函数是你的源文件里定义的嘛?不是的话,你应该缺少了一些库。[/quote] 是在无main函数的源文件里定义的,出错是什么原因呢?[/quote] 链接的时候没有加入包含定义的源文件生成的目标文件(.o/.obj)
line_us 2015-08-25
  • 打赏
  • 举报
回复
引用 4 楼 u012093152 的回复:
makefile不能解决么?
好主意
_lee_chong 2015-08-25
  • 打赏
  • 举报
回复
你什么开发环境。。。。
赵4老师 2015-08-25
  • 打赏
  • 举报
回复
请牢记:源代码本身的书写是否结构化或面向对象或符合设计模式或敏捷…并不重要,重要的是你是否使用结构化或面向对象或符合设计模式或敏捷…的方法命名标识符、阅读、修改、检查、测试源代码。 意思是你程序结构看上去再合理,再简洁,也不一定比看上去一团乱麻的程序结构在运行或修改时更不易出错,更方便修改,出错了更容易找到哪里出错和具体出错的原因,更容易改正错误。 试对比 图书馆(对图书的分类够结构化了吧) 和 搜索引擎(可看作是扁平化任何结构数据,仅支持全文检索) 哪个处理信息更方便、更高效。 所以 与其费劲去重构代码让其看上去更简洁、更合理 不如费劲学习grep、sed、awk、……这类全文搜索和批处理编辑的工具。 结构越复杂,越难修改,越难除错。 有时(甚至大多数时候),看上去越合理、越简洁的代码,运行起来性能越差,出错时查找原因越难,找到出错原因后改正越费劲。 程序员要做的不是尽力避免错误,而是聚焦在快速发现并改正错误。真正以快速方式轻易解决错误,“快速的失败”远胜过“预防错误”。Fred George
此后三年 2015-08-24
  • 打赏
  • 举报
回复
windos下面的东西,直接在vs里建一个新的proj, 把所有源文件添加进去即可编译 vs号称宇宙第一IDE, 好好利用。
GKatHere 2015-08-24
  • 打赏
  • 举报
回复
各个模块编译下, 生成.obj, 在最终输出项目的链接器中添加输入文件 xxx.obj. (VS: 项目属性 | 链接器 | 输入 | 附加依赖项 中添加) makefile, 命令行都行
suwhut 2015-08-24
  • 打赏
  • 举报
回复
引用 12 楼 fefe82 的回复:
[quote=引用 11 楼 suwhut 的回复:] [quote=引用 6 楼 fefe82 的回复:] [quote=引用 楼主 suwhut 的回复:] 因为工程有点大,得分几个模块,所以就产生了几个源文件,如何把他们组合在一起呢?
操作系统是啥?编译器是啥? 实在搞不定的话,就 copy paste 到一个源文件里[/quote] 我编译时,都没有问题,但是链接时,就会出现某些函数不能识别error LNK2001: unresolved external symbol "void __cdecl search_book_by_isbn(void)" (?search_book_by_isbn@@YAXXZ),而且全都是没有参数的函数,有参数的函数则可以识别,感觉问题不是太大。[/quote] 这个函数是你的源文件里定义的嘛?不是的话,你应该缺少了一些库。[/quote] 是在无main函数的源文件里定义的,出错是什么原因呢?
fefe82 2015-08-24
  • 打赏
  • 举报
回复
引用 11 楼 suwhut 的回复:
[quote=引用 6 楼 fefe82 的回复:] [quote=引用 楼主 suwhut 的回复:] 因为工程有点大,得分几个模块,所以就产生了几个源文件,如何把他们组合在一起呢?
操作系统是啥?编译器是啥? 实在搞不定的话,就 copy paste 到一个源文件里[/quote] 我编译时,都没有问题,但是链接时,就会出现某些函数不能识别error LNK2001: unresolved external symbol "void __cdecl search_book_by_isbn(void)" (?search_book_by_isbn@@YAXXZ),而且全都是没有参数的函数,有参数的函数则可以识别,感觉问题不是太大。[/quote] 这个函数是你的源文件里定义的嘛?不是的话,你应该缺少了一些库。
suwhut 2015-08-24
  • 打赏
  • 举报
回复
引用 6 楼 fefe82 的回复:
[quote=引用 楼主 suwhut 的回复:] 因为工程有点大,得分几个模块,所以就产生了几个源文件,如何把他们组合在一起呢?
操作系统是啥?编译器是啥? 实在搞不定的话,就 copy paste 到一个源文件里[/quote] 我编译时,都没有问题,但是链接时,就会出现某些函数不能识别error LNK2001: unresolved external symbol "void __cdecl search_book_by_isbn(void)" (?search_book_by_isbn@@YAXXZ),而且全都是没有参数的函数,有参数的函数则可以识别,感觉问题不是太大。
suwhut 2015-08-24
  • 打赏
  • 举报
回复
引用 7 楼 GKatHere 的回复:
各个模块编译下, 生成.obj, 在最终输出项目的链接器中添加输入文件 xxx.obj. (VS: 项目属性 | 链接器 | 输入 | 附加依赖项 中添加) makefile, 命令行都行
不行啊,一旦我要输入文件,整个程序都停止工作了。 我编译时,都没有问题,但是链接时,就会出现某些函数不能识别error LNK2001: unresolved external symbol "void __cdecl search_book_by_isbn(void)" (?search_book_by_isbn@@YAXXZ),而且全都是没有参数的函数,有参数的函数则可以识别,这太奇怪了。。。
suwhut 2015-08-24
  • 打赏
  • 举报
回复
引用 8 楼 a30037338 的回复:
windos下面的东西,直接在vs里建一个新的proj, 把所有源文件添加进去即可编译 vs号称宇宙第一IDE, 好好利用。
尝试过这种方法,但是在添加过程中,vs提示出现一个问题,最后程序关闭。
suwhut 2015-08-23
  • 打赏
  • 举报
回复
引用 4 楼 u012093152 的回复:
makefile不能解决么?
没接触过makefile,有没有其他的方法啊
SoC1 2015-08-23
  • 打赏
  • 举报
回复
makefile不能解决么?
suwhut 2015-08-23
  • 打赏
  • 举报
回复
引用 2 楼 mujiok2003 的回复:
一个sln(solution)可以包含多个project, 各个project可以共享代码文件的。
能不能说明白点呢,我要解决的是一个project内的几个源文件之间的组合问题,不是多个project之间的问题。其中一个含有main函数的源文件调用其他源文件里的函数时,会出错unresolved external symbol "void __cdecl load_books(void)",这是什么原因呢?
mujiok2003 2015-08-23
  • 打赏
  • 举报
回复
一个sln(solution)可以包含多个project, 各个project可以共享代码文件的。
suwhut 2015-08-23
  • 打赏
  • 举报
回复
有没有大神能解啊?
fefe82 2015-08-23
  • 打赏
  • 举报
回复
引用 楼主 suwhut 的回复:
因为工程有点大,得分几个模块,所以就产生了几个源文件,如何把他们组合在一起呢?
操作系统是啥?编译器是啥? 实在搞不定的话,就 copy paste 到一个源文件里
1.1 课程内容嵌入式软件工程师的学习路线一般是:单片机、RTOS、Linux。当你掌握单片机开发后,如果要进一步提升编程水平,建议学习RTOS(Real Time Operating System,实时操作系统)。有很多优秀的RTOS,比如FreeRTOS、RT-Thread、UCOS等等。FreeRTOS使用范围最广泛,RT-Thread生态丰富,UCOS是收费的并且很少使用了。对于初学者,建议先学习FreeRTOS。只要学会了任意一款RTOS,肯定就会使用其他RTOS了。我们在2022年已经推出了“FreeRTOS快速入门”课程。为何还要重新制作“FreeRTOS入门与工程实践”?“FreeRTOS快速入门”只是讲解FreeRTOS的各类API的理论、用法、示例,这些实验是基于Keil自带的STM32F103模拟器。没有使用更多的硬件模块、不能体现工作的实际场景。在“FreeRTOS入门与工程实践”,将引入更多的硬件模块,并展示实际工程示例的用法。另外,基于RTOS的程序一般都比较复杂,涉及的源文件非常多,在工作一般都基于“面向对象”的思想来写程序。所以,本课程会涉及如下内容:讲解FreeRTOS的常用API:理论、用法选择合适的硬件模块,展示这些API的实例实现合适的小项目,展示工作的编程方法1.2 讲课方式对于每一个实验,我们会精心设计:要解决什么问题;然后讲解FreeRTOS提供的解决方法。讲解FreeRTOS的API及内部原理(不深入讲解内部源码,只是进行原理性介绍)讲解实验过程使用的模块的接口函数(只讲使用,不讲内部实现,模块的源码实现单独开课讲解)讲解原理时,配合着文档、现场画图进行讲解,跟学校老师写黑板一样最后现场从0编写程序并调试一切都是现场操作,绝对不会照着PPT念,绝对不会照着现成的代码讲解。只有现场从0操作,学员才能身临其境地学习,跟着教程:碰到问题、解决问题。1.3 硬件平台本课程基于DshanMCU-103开发套件进行开发,它由3部分组成:STM32F103C8T6的最小系统板、扩展底板、各类模块。如下图所示:  上述硬件再加一个ST-Link即可学完本课程所有内容。主板DshanMCU-103是基于STM32F103C8T6的最小系统板。之所以选择最小系统板,而不是把所有模块都放在一个整体的电路板上,目的如下:低成本尝试:嵌入式软件开发并不一定适合你,可以购买最小系统板进行体验、及时放弃按需购买:用到再买,讲究一个性价比 

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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