如何以及何时进行静态链接(MinGW)?

时间:2010-12-10 01:37:12

标签: c++ static linker mingw fortran

我很难将C ++应用程序与另一个使用Fortran90依赖项的C ++库(MinGW,TDM g ++和gfortran)联系起来。我要么必须使用gfortran进行链接,要么在启动时使用应用程序崩溃(在全局构造函数中键入__cxa_get_globals_fast)。但是这是不可接受的,我想使用g ++进行链接(Qt GUI)。

在我看来,库的依赖关系不能与gcc静态链接,链接仅在 main() 可用时执行。为什么?

我想部分是因为某些初始化的代码必须在main()之前插入。

为什么静态链接的应用程序需要DLL-s ,例如运行时的mingwm10.dll或pthreadGCE2.dll?为什么这些不能静态链接?

更新:我刚刚找到这些网站:
http://www.deer-run.com/~hal/sol-static.txt
http://www.iecc.com/linker/

2 个答案:

答案 0 :(得分:1)

与gfortran链接和使用ld / gcc / g ++链接之间的主要区别在于gfortran默认链接标准fortran库,而使用其他链接器时,您需要手动指定要链接的库。我无法通过快速搜索找到它们,但它应该与-lgfortran一致。

此外,如果你的主要程序不是用fortran编写的话,gfortran需要调用某些特定的instructions for initialisation routines才能使某些fortran内在函数工作。如果你还没有调用这些例程,那么这可能会导致崩溃。

答案 1 :(得分:1)

  

为什么静态链接的应用程序需要DLL-s,例如运行时的mingwm10.dll或pthreadGCE2.dll?为什么这些不能静态链接?

他们可以,但由于动态库的基本优势,不提供静态库版本:可以修复错误而无需重建可执行文件。