7
A
回答
7
它不兼容。但是,如果你從庫中提取所有的目標文件(使用ar
),VC++鏈接器能夠處理那些(我測試過它,儘管我使用了cygwin gcc而不是mingw gcc)。請注意,如果您不使用extern "C"
,則可能仍有名稱混亂問題。
您當然可以使用VC++的LIB.EXE
工具將這些工具製作成VC++格式的靜態庫。
正如@邁克爾指出,你肯定會,如果你嘗試通過不同的編譯器內置模塊之間的非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
相關問題
- 1. MingW靜態庫鏈接 - SFML 2.1
- 2. 在MinGW中靜態鏈接庫
- 3. 在C++ visual studio中鏈接靜態庫
- 4. Visual Studio:靜態鏈接到靜態庫
- 5. 靜態庫鏈接兩次
- 6. 如何配置NetBeans以靜態鏈接MinGW C++庫?
- 7. C靜態鏈接庫嗎?
- 8. Microsoft Visual Studio〜C/C++運行時庫〜靜態/動態鏈接
- 9. 從MinGW靜態庫(.a)到Visual Studio靜態庫(.lib)
- 10. 與MinGW-64的靜態鏈接
- 11. 在gcc中的靜態鏈接(mingw)
- 12. 將靜態C++庫鏈接到c庫
- 13. 在Visual Studio中靜態鏈接庫
- 14. 鏈接到靜態庫在Visual Studio 2010
- 15. 在Visual Studio中靜態鏈接ffmpeg庫
- 16. Visual C++靜態庫
- 17. 靜態和動態庫鏈接在Visual Studio C++
- 18. 如何再出口CLR C++靜態庫
- 19. 靜態鏈接庫
- 20. 鏈接靜態庫與靜態庫
- 21. UNIX:靜態庫鏈接到靜態庫
- 22. Visual Studio 2013 C++鏈接靜態庫glew,虛擬機上的glfw
- 23. 針對Visual C++ Express 2008的靜態運行時庫鏈接
- 24. 如何靜態鏈接C#ClassLibrary的庫?
- 25. MinGW在Code :: Blocks中沒有鏈接靜態OpenSSL庫
- 26. C++ Visual Studio 2010未鏈接本機靜態庫
- 27. Visual Studio 2008 IDE - 靜態鏈接一個C Dll庫
- 28. 將動態庫鏈接到鏈接到其他靜態庫的靜態庫
- 29. Qt:庫的靜態鏈接
- 30. 對鏈接的靜態庫
對象文件將不兼容兩種。 –
@邁克爾:他們是,我只是測試過它。 –
很酷。謝謝。優秀的答案。 – Cartesius00