我很难将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/
答案 0 :(得分:1)
与gfortran链接和使用ld / gcc / g ++链接之间的主要区别在于gfortran默认链接标准fortran库,而使用其他链接器时,您需要手动指定要链接的库。我无法通过快速搜索找到它们,但它应该与-lgfortran一致。
此外,如果你的主要程序不是用fortran编写的话,gfortran需要调用某些特定的instructions for initialisation routines才能使某些fortran内在函数工作。如果你还没有调用这些例程,那么这可能会导致崩溃。
答案 1 :(得分:1)
为什么静态链接的应用程序需要DLL-s,例如运行时的mingwm10.dll或pthreadGCE2.dll?为什么这些不能静态链接?
他们可以,但由于动态库的基本优势,不提供静态库版本:可以修复错误而无需重建可执行文件。