2011-04-15 163 views
3

我目前正在嘗試使用Windows和MinGW編譯動態鏈接庫(對於插件系統)。編譯動態鏈接庫

我編譯使用此命令行中的每個對象:

mingw-g++ -fPIC test.cpp 

而庫使用該行:

mingw-g++ -rdynamic -shared -Wl,-soname,test.so.1 -o test.so test.o

它不會在所有的(使用GCC在Linux下工作,一類似的線路雖然工作):fPIC和rdynamic由於某種原因被忽略。 在嘗試創建庫時,它會失敗,因爲編譯器會嘗試將它鏈接到應該解析的對象上,因爲我將它動態鏈接到主二進制文件。

那麼你如何使用MinGW編譯這個?

謝謝:)!

回答

5

-fPIC-rdynamic被忽略,因爲它們未用於Windows。

此外,.so不是Windows上庫的正確輸出擴展名。

要做出/共享庫在Windows上使用GCC:

mingw-g++ -c file.cpp -o file.o 
mingw-g++ -shared -Wl,--out-implib,libfile.a -o file.dll file.o 

無多,不會少。

而且,文檔始終是可愛的有:http://www.mingw.org/wiki/sampleDLL

+0

因此,基本上,當一個編譯器標誌設置和conpiler不知道它,它會被忽略?我認爲編譯器應該拋出一個錯誤或至少一個警告 – Bionix1441 2016-03-22 09:10:26

+1

@Bionix依賴於選項和編譯器。有時在忽略這種選擇時會導致更少的麻煩,比如在這種情況下。 – rubenvb 2016-03-22 14:27:42