将gcc与g+链接+;代码
我正在尝试链接程序中已经存在的库。我的程序是用C++编写的,库是在C开发的,现在我面临编译和链接时的问题。p> 我关注了本论坛的许多帖子,这些帖子涉及到将gcc库与g++源代码链接。无论如何,我可以解决一些问题。现在,我面临一个问题。下面是我的问题的细节 在testlib.h文件中将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; } 我创建了这些文件的静态库 我的下一步是
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++ >文件>中使用的
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"
}