首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在make文件中可以链接.cc文件而不能链接.c文件?

为什么在make文件中可以链接.cc文件而不能链接.c文件?
EN

Stack Overflow用户
提问于 2019-12-10 06:01:25
回答 1查看 153关注 0票数 0

我正在处理来自tensorflow存储库的一个相当大的Makefile,我需要添加一个文件链接。

在对链接错误进行了相当多的调试之后,我发现如果我的文件以.cc结尾,那么链接错误就会消失,而当链接.c文件时,错误就会出现(文件内容保持不变)。

我将文件链接到一个Makefile.inc文件中:

代码语言:javascript
复制
.
.
.
FL_SRCS := \
tensorflow/lite/vis_mi/main.cc \
myFunctions.c \ -->>>>IF I CHANGE THE FILENAME TO myFunctions.cc and link to this .cc file here, it works!!
.
.
.
# Builds a standalone binary.
$(eval $(call vis_test,vis_mi,\
$(FL_SRCS),$(FL_HDRS)))

使用.c结束时的链接错误以:

代码语言:javascript
复制
tensorflow/lite/vis_mi/main.o: In function `main':
tensorflow/lite/vis_mi/main.cc:183: undefined reference to `printMsg()'
../downloads/gcc_embedded/bin/../lib/gcc/arm-none-eabi/7.3.1/../../../../arm-none-eabi/bin/ld: link errors found, deleting executable `tensorflow/lite/vis_mi'
collect2: error: ld returned 1 exit status
gmake: *** [tensorflow/lite/vis_mi/Makefile.inc:578: tensorflow/lite/vis_mi/bin/micro_speech] Error 1

.c文件代码:

代码语言:javascript
复制
#include <stdio.h>
#include "myFunctions.h"


void printMsg(){
    //do something here
}

和头文件:

代码语言:javascript
复制
#ifndef MYFUNCTIONS_H
#define MYFUNCTIONS_H

void printMsg();
#endif /* MYFUNCTIONS_H */

如何包含以.c结尾的文件?Makefile对我来说是相当新的,不想包含所有的细节,如果你需要Makefile中的任何进一步的细节来回答这个问题,我很乐意编辑我的帖子。

EN

Stack Overflow用户

回答已采纳

发布于 2019-12-10 14:13:12

C和C++函数的名称解析是不同的。这有时会给也是有效的"C++“的"C”代码带来问题。例如:

代码语言:javascript
复制
int foo(int x) { return x+1 } ;

代码将在编译为"C“时创建名为”foo“的函数,并在编译为C++时创建名为”_Z3fooi“的函数。(使用c++filt)解码C++名称将显示foo(int)。差异的原因是C++支持多态函数(和方法),因此函数名称还可以标识其参数的类型。

正确的解决方案是决定代码的语言。C++和C是不同的语言,虽然可以编写对两者都有效的代码,但这将限制利用每个函数能力的能力。

重要约束:如果项目同时包含C和C++代码,重要的是要记住,只有遵循"C“约定的函数才能在两种语言之间调用。这通常是通过extern "C"指令和#ifdef __cplusplus实现的

更多信息:https://www.thegeekstuff.com/2013/01/mix-c-and-cpp/ How to call C++ function from C? Call a C function from C++ code

票数 4
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59257311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档