GNU C和C ++链接错误

时间:2016-02-17 01:45:17

标签: c++ c gcc compiler-errors linker

我正在尝试用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

有没有人看到这个问题?

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的目标文件是相同的。 你的一个目标文件被覆盖。