簡體   English   中英

鏈接 Visual C 反對 MinGW 的 static 庫

[英]Link Visual C againts MinGW's static library

如何將 Visual C++ (2010) 控制台應用程序與MinGW創建的 STATIC 庫( *.a格式)聯系起來? 它與 Visual C++ 2010 兼容嗎?

謝謝你。

它不兼容。

但是,如果您從庫中提取所有 object 文件(使用ar ),則 VC++ linker 能夠處理這些文件(我對其進行了測試,盡管我使用的是 cygwin ZE0D511356BD4413B0AF49CC96CccF 而不是 gwZccF)。 請注意,如果您不使用extern "C" ,您可能仍然會遇到名稱修改問題。

您當然可以使用 VC++ 的LIB.EXE工具將它們制作成 VC++ 格式的 static 庫。


正如@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 <iostream>

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM