我正在尝试用C ++编译一个函数,然后获取输出对象文件并将其编译成C函数。我在链接过程中遇到错误。这是代码:
row_executor.c:
#include "row_exec.h"
void row_executor(char* row) {
row_exec(row);
return;
}
row_exec.h
#ifndef ROWEXEC_CPP_H
#define ROWEXEC_CPP_H
#ifdef __cplusplus
//fill in C++ code here later
#endif
#ifdef __cplusplus
extern "C" {
#endif
void row_exec(char* rowname);
#ifdef __cplusplus
} //end extern "C"
#endif
#endif
row_exec.cpp:
#ifdef __cplusplus
#include "row_exec.h"
#include <iostream>
using namespace std;
void row_exec(char* rowname) {
cout << "Row name is: " << rowname << endl;
}
#endif
C ++目标文件由makefile条目生成:
row_exec.o: row_exec.cpp row_exec.h
g++ -Wall -c row_exec.cpp
C对象文件由:
生成gcc -c -I<include paths> -g -fPIC -DPIC -o row_exec.o row_executor.c
两者都生成目标文件,但是当row_executor.o与一堆其他不相关的目标文件链接在一起时,我得到以下错误:
row_executor.o(。text + 0x1a):在函数row_executor':
/LAB/MODULES/rev_13~~/row_executor.c:4: undefined reference to
row_exec'中
collect2:ld返回1退出状态
make:*** [hm_prod_rev_16.so]错误1
有没有人看到这个问题?
答案 0 :(得分:1)
row_exec.o: row_exec.cpp row_exec.h
g++ -Wall -c row_exec.cpp
gcc -c -I<include paths> -g -fPIC -DPIC -o row_exec.o row_executor.c
row_exec.c和row_executor.c的目标文件是相同的。 你的一个目标文件被覆盖。