加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

链接错误c和c(未定义的引用)

发布时间:2020-12-16 09:50:03 所属栏目:百科 来源:网络整理
导读:abc.c文件 #include "abc.h"int abc(){ return 10;} abc.h文件 int abc(); mymain.cpp文件 #include "abc.h"int main(){ abc(); return 0;} Makefile文件 CC=gcc -O2 CP=g++mymain: mymain.o abc.o $(CP) -o mymain mymain.o abc.omymain.o: mymain.cpp abc.
abc.c文件

#include "abc.h"
int abc()
{
    return 10;
}

abc.h文件

int abc();

mymain.cpp文件

#include "abc.h"
int main()
{
    abc();
    return  0;
}

Makefile文件

CC=gcc -O2 
CP=g++

mymain: mymain.o abc.o
    $(CP) -o mymain mymain.o abc.o

mymain.o: mymain.cpp abc.h
    $(CP) -c mymain.cpp abc.h

abc.o: abc.c abc.h
    $(CC) -c abc.c abc.h

clean:  
    $(RM) *.o mymain

产量

g++ -c mymain.cpp abc.h
gcc -O2  -c abc.c abc.h
g++ -o mymain mymain.o abc.o
mymain.o: In function `main':
mymain.cpp:(.text+0x5): undefined reference to `abc()'
collect2: error: ld returned 1 exit status
make: *** [mymain] Error 1

为什么abc()是未定义的引用?

UPDATE

新的abc.h

extern "C" {
    int abc();
}

错误

g++ -c mymain.cpp abc.h
gcc -O2  -c abc.c abc.h
In file included from abc.c:1:0:
abc.h:1:8: error: expected identifier or ‘(’ before string constant
 extern "C" {
        ^
abc.h:1:8: error: expected identifier or ‘(’ before string constant
 extern "C" {
        ^
make: *** [abc.o] Error 1

解决方法

问题是你试图将C函数链接到C对象,而不告诉编译器这是你在做什么.

如果您的头文件(abc.h)看起来像这样:

extern "C" {
    int abc();
}

它会工作(当包含在C源中时……但是当包含在C源中时会中断).

您可以将外部“C”{及其尾随}括在宏中,如Combining C++ and C – how does #ifdef __cplusplus work?所示,以便适合C和C包含.

请注意,makefile中的$(CP)-c mymain.cpp abc.h没有意义 – 您不希望在编译器命令行上指定标头.这适用于该模式的两个实例.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读