[英]Undefined reference when compiling a C and C++ file with same header
簡而言之,我有一個 CPP 和 C 代碼,我的 CPP 代碼試圖從帶有頭文件的 C 代碼中引用函數。 每當我運行 make 命令時,我最終都會收到“未定義的引用”錯誤。 這是我的代碼:
cpp_code.cpp:
extern "C"{
#include "header_code.h";
}
int main(){
cout << "Hello" << endl;
return 0;
}
c_code.c:
#include "header_code.h"
int main(){
printf("Hello");
return 0;
}
void initalize(){
printf("Initilized");
}
header_code.h:
extern void initalize();
生成文件:
CXX = g++
CXXFLAGS = -std=c++11
CC = gcc
DEPS = header_code.h
CFLAGS = -I
OBJS = cpp_code.o c_code.o
c: $(OBJS)
$(CXX) -o $@ $^ $(CXXFLAGS)
%.o : %.cpp
$(CXX) -c $(CXXFLAGS) $<
%.o : %.c $(DEPS)
$(CC) -c $(CFLAGS) $<
每當運行 make 它總是給我帶來問題。 誰能幫幫我嗎? 感謝您花時間閱讀所有這些!
[基本.start.main ]
在全局范圍內聲明變量
main
程序,或在全局范圍內聲明一個附加到命名模塊的函數main
,或聲明具有 C 語言鏈接(在任何命名空間中)的名稱main
是格式錯誤的。
所以,作為一個C++
程序,它是格式錯誤的。 刪除C
main
函數。
其他問題:
在你的makefile中CFLAGS = -I
編譯時之后的任何內容都將被視為搜索頭文件的目錄。在您的makefile中,這就是源文件。 更正:
CFLAGS =
或者CFLAGS = -I.
您的頭文件缺少頭文件保護,並且應該由 C 和 C++ 代碼使用的頭文件通常包含extern "C"
部分,以免增加 C++ 用戶添加它的負擔。
cpp_code.cpp
#include "header_code.h"
#include <iostream>
int main() {
initalize(); // call the C function
std::cout << "Hello" << std::endl;
}
c_code.c
#include "header_code.h"
#include <stdio.h>
void initalize(){
printf("Initilized");
}
header_code.h
#ifndef HEADER_CODE_H_
#define HEADER_CODE_H_
#ifdef __cplusplus
extern "C" {
#endif
extern void initalize();
#ifdef __cplusplus
}
#endif
#endif
生成文件
CXX = g++
CXXFLAGS = -std=c++11
CC = gcc
DEPS = header_code.h
CFLAGS = -I.
OBJS = cpp_code.o c_code.o
c: $(OBJS)
$(CXX) -o $@ $^ $(CXXFLAGS)
%.o : %.cpp
$(CXX) -c $(CXXFLAGS) $<
%.o : %.c $(DEPS)
$(CC) -c $(CFLAGS) $<
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.