Intereting Posts

Ссылка Visual C повторяет статическую библиотеку MinGW

Как можно связать консольное приложение Visual C ++ (2010) с библиотекой STATIC, созданной MinGW (формат *.a )? Он совместим с Visual C ++ 2010?

Спасибо.

Это несовместимо.

Однако, если вы извлекаете все объектные файлы из библиотеки (используйте ar ), компоновщик VC ++ может справиться с ними (я тестировал его, хотя я использовал cygwin gcc, а не mingw gcc). Обратите внимание, что у вас могут быть проблемы с изменением имени, если вы не используете extern "C" .

Разумеется, вы можете использовать инструмент LIB.EXE от VC ++, чтобы превратить их в статическую библиотеку в формате VC ++.


Как указывает @Michael, у вас наверняка возникнут проблемы, если вы попытаетесь передать объекты, отличные от POD C ++, между модулями, построенными с использованием разных компиляторов. Исправление для этого такое же, как и в случае с DLL: напишите оболочку, построенную с одним и тем же компилятором (в данном случае mingw), которая предоставляет C-совместимый интерфейс, который можно использовать для других инструментов.


 // minimal.cpp extern "C" int m(void) { return 7; } 

 $ gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-pc-cygwin/4.5.0/lto-wrapper.exe Target: i686-pc-cygwin Configured with: /gnu/gcc/releases/respins/4.5.0-1/gcc4-4.5.0-1/src/gcc-4.5.0/co nfigure --srcdir=/gnu/gcc/releases/respins/4.5.0-1/gcc4-4.5.0-1/src/gcc-4.5.0 -- prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --libexecdi r=/usr/lib --datadir=/usr/share --localstatedir=/var --sysconfdir=/etc --dataroo tdir=/usr/share --docdir=/usr/share/doc/gcc4 --datadir=/usr/share --infodir=/usr /share/info --mandir=/usr/share/man -v --with-gmp=/usr --with-mpfr=/usr --enable -bootstrap --enable-version-specific-runtime-libs --libexecdir=/usr/lib --enable -static --enable-shared --enable-shared-libgcc --disable-__cxa_atexit --with-gnu -ld --with-gnu-as --with-dwarf2 --disable-sjlj-exceptions --enable-languages=ada ,c,c++,fortran,java,lto,objc,obj-c++ --enable-graphite --enable-lto --enable-jav a-awt=gtk --disable-symvers --enable-libjava --program-suffix=-4 --enable-libgom p --enable-libssp --enable-libada --enable-threads=posix --with-arch=i686 --with -tune=generic --enable-libgcj-sublibs CC=gcc-4 CXX=g++-4 CC_FOR_TARGET=gcc-4 CXX _FOR_TARGET=g++-4 GNATMAKE_FOR_TARGET=gnatmake GNATBIND_FOR_TARGET=gnatbind --wi th-ecj-jar=/usr/share/java/ecj.jar Thread model: posix gcc version 4.5.0 (GCC) $ gcc -c minimal.cpp 

 // minmain.cpp extern "C" int m(void); #include  int main(void) { std::cout << m() << "\n"; } 

 R:\>cl /c /EHsc minmain.cpp Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86 Copyright (C) Microsoft Corporation. All rights reserved. minmain.cpp R:\>link minmain.obj minimal.o Microsoft (R) Incremental Linker Version 10.00.40219.01 Copyright (C) Microsoft Corporation. All rights reserved. R:\>minmain 7