将gcc与g+链接+;代码

将gcc与g+链接+;代码,gcc,g++,Gcc,G++,我正在尝试链接程序中已经存在的库。我的程序是用C++编写的,库是在C开发的,现在我面临编译和链接时的问题。p> 我关注了本论坛的许多帖子,这些帖子涉及到将gcc库与g++源代码链接。无论如何,我可以解决一些问题。现在,我面临一个问题。下面是我的问题的细节 在testlib.h文件中 int sum(int x, int y) In testlib.c file int sum(int x, int y) { return x + y; } 我创建了这些文件的静态库 我的下一步是

我正在尝试链接程序中已经存在的库。我的程序是用C++编写的,库是在C开发的,现在我面临编译和链接时的问题。p> 我关注了本论坛的许多帖子,这些帖子涉及到将gcc库与g++源代码链接。无论如何,我可以解决一些问题。现在,我面临一个问题。下面是我的问题的细节

在testlib.h文件中

int sum(int x, int y)

In testlib.c file

int sum(int x, int y) { 
    return x + y;
} 
我创建了这些文件的静态库

我的下一步是在g++源代码中使用这个函数

在call.hh文件中

#include<iostream>


#include "testlib.h"

using namespace std;

extern "C" {
    int sum(int x, int y);
}

namespace math_operation {
    void show_addition(int x, int y); 
}
我有两个问题: 首先,它给出了编译错误,因为我已经声明了两次函数int sum(int,int)。但是,如果我没有在call.hh中声明extern“C”{int sum(int,int)},编译问题将得到解决,链接器问题将被创建,并出现以下错误: 对“sum(int,int)”的未定义引用

我怎样才能修好它

extern "C" {
#include "testlib.h"
}
不要自己申报。应该有用


不要自己申报。对于< C++ >文件>中使用的>TestLIB .H./>代码,它应该声明为“代码>外部”C”/代码>:

然后,当您将
sum
定义为
extern“C”
时,定义与声明匹配,并且您不会得到重新声明错误或未定义的引用

如果无法编辑
testlib.h
,则可以将其包含在
extern“C”
块中,如aragaer的回答所示:

extern "C" {
#include "testlib.h"
}
(但这通常是一个很难解决的问题,最好修复库)


您不应该在自己的
call.hh
文件中声明
sum
,有一个声明它的头,您应该使用头(在头内部或其
周围添加
extern“C”
,必要时包括
)< > /p> > p> >在C++文件中可用的>TestLIB .H/COD>应声明的函数为<代码>外“C”<代码>:

然后,当您将
sum
定义为
extern“C”
时,定义与声明匹配,并且您不会得到重新声明错误或未定义的引用

如果无法编辑
testlib.h
,则可以将其包含在
extern“C”
块中,如aragaer的回答所示:

extern "C" {
#include "testlib.h"
}
(但这通常是一个很难解决的问题,最好修复库)


您不应该在自己的
call.hh
文件中声明
sum
,有一个声明它的头文件,您应该使用头文件(在头文件内部或其
周围添加
extern“C”
,必要时包括

gcc-C testlib.C-o testlib.o;g++main.cc call.cc testlib.o-o main
works.
gcc-c testlib.c-o testlib.o;g++main.cc call.cc testlib.o-o main
#ifdef __cplusplus
extern "C" {
#endif

int sum(int x, int y);

#ifdef __cplusplus
}
#endif
extern "C" {
#include "testlib.h"
}