2011-08-08 410 views

回答

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

相關問題