2011-08-08 6 views
0

可能性の重複:
Using Windows DLL from Linuxlinuxクライアントからwindows DLLを呼び出すことはできますか?

私は、チュートリアルでは、このコマンドラインを見つけました。

gcc -o Client1 Client1.o CodeSample1.dll -lgdi32 -lm 

WindowsクライアントをWindowsクライアントから呼び出すことは可能ですか?WindowsクライアントからLinuxの.soファイルを呼び出すことは可能ですか?言語、名前の装飾などの制約はありますか?

おかげ

答えて

2

は、私はあなたが実際にあなたが尋ね尋ねしようとしていないという疑いを持っています。

例の.dllファイルは単なる共有ライブラリです。共有ライブラリとGCCをリンクすることができます。唯一の問題は、あなたがあなたのライブラリと呼ぶものです:

// Stage 1: Build and link the library: 

gcc -c -o mylib.o mylib.c   // Compile 

gcc -shared -o mylib.dll mylib.o // on Windows 
gcc -shared -o libmylib.so mylib.o // on Linux etc. 

命名規則は実際には慣例に過ぎません。今すぐプログラムをリンクしてください:

// Stage 2: Build and link your application: 
gcc -c o main.c main.cpp       // Compile 

gcc -o main main.o mylib.dll -lm -lfoo -lgdi32  // Windows 
gcc -o main main.o libmylib.so -lm -lfoo   // Linux 
gcc -o main main.o -lmylib -lm -lfoo -L/opt/mylibs // Alternatively 

コードが完全に手元にある場合は、まずライブラリを作成してプロジェクトにリンクしてください。

実際には、ライブラリのソースコードが利用できず、Windowsバイナリしか持っていない場合は、状況が非常に厄介です。たとえば、バイナリ形式は互換性がありません。

+0

あなたは頭の爪を打つが、私はまだあなたのための質問があります。 DLLはVB6コンパイラを使用して作成されます。これはWindowsバイナリを作成していませんか?なぜこれはgccを使ってリンク可能ですか? – Peretz

+1

Windowsでは、GCCの一部であるリンカはWindowsバイナリ形式を使用しているので、すべてのWindows DLL(すべて同じバイナリ形式を使用します)を読み取ることができます。 C関数を使っている限り、C ABIは非常に安定しているので、あなたは比較的安全です。あなたがC++クラスライブラリで同じことをしようとすると、うまくいくかもしれません。 –

+0

Linuxではどうなりますか? gccを使用してDLLをリンクできますか? – Peretz

関連する問題