c – 执行静态链接的方式和时间(MinGW)?

我有很多痛苦将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/

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

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

点赞