LinuxでコンパイルされたC++コードで、Windowsでコンパイルされたこれまでで最も原始的なDLLライブラリを使用できることに興味があります。問題のライブラリは、Windowsコアの巨大なプロプライエタリではないと仮定しましょう。
…次のような偽のAPIを備えたものだけです(ここにヘッダーと実装の両方があります):
// MathFuncsDll.h
namespace MathFuncs
{
class MyMathFuncs
{
public:
// Returns a + b
static __declspec(dllexport) double Add(double a, double b);
// Returns a - b
static __declspec(dllexport) double Subtract(double a, double b);
};
}
// MathFuncsDll.cpp
#include "MathFuncsDll.h"
using namespace std;
namespace MathFuncs
{
double MyMathFuncs::Add(double a, double b)
{
return a + b;
}
double MyMathFuncs::Subtract(double a, double b)
{
return a - b;
}
}
このライブラリには、<iostream>以外の依存関係はありませんね。
Linuxでコンパイルされた.cppには、次のものが含まれます。
// MyExecRefsDll.cpp
// compile with: /EHsc /link MathFuncsDll.lib
#include <iostream>
#include "MathFuncsDll.h"
using namespace std;
int main()
{
double a = 7.4;
int b = 99;
cout << "a + b = " <<
MathFuncs::MyMathFuncs::Add(a, b) << endl;
cout << "a - b = " <<
MathFuncs::MyMathFuncs::Subtract(a, b) << endl;
return 0;
}
サンプルは、すばらしいMSDNチュートリアルから取得されました。
MathDuncsDll
だから、私の質問を明確にするために:Linuxコンパイラとリンクツールが別の.soのように依存関係のない.dllライブラリを使用するのを妨げるものは何ですか?たぶん、別の呼び出し構文?それとも、リンクプロセス全体が異なるのでしょうか?(漠然とした「これらのOSは根本的に異なる」「あるプラットフォームから別のプラットフォームで何かを使用することは不可能」だけでなく、詳細を聞きたい)これらの違いを克服するためにどれだけの努力が必要か(私たちは'Wineを使用していません)?
事前にどうもありがとうございました!