プログラム内の既存のライブラリをリンクしようとしています。私のプログラムはC++で書かれており、ライブラリはCで開発されました。現在、コンパイルとリンク中に問題が発生しています。
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);
}
この関数をcall.ccファイルで定義しました
#include "call.hh"
#include<iostream>
using namespace std;
void math_operation::show_addition(int x, int y){
cout<<" sum "<<sum(x, y)<<endl;
}
ここで、この関数をmain.ccで呼び出します
#include "call.hh"
using namespace math_operation;
int main() {
int x = 10;
int y = 15;
show_addition(x, y);
return 0;
}
2つの問題があります。1つは、関数int sum(int、int)を2回宣言したため、コンパイルエラーが発生することです。しかし、call.hhでextern "C" {int sum(int、int)}を宣言しない場合、コンパイルの問題は解決され、リンカーの問題は次のエラーで作成されます: `sum(int、int)'への未定義の参照
どうすれば修正できますか?