2011-04-15 165 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