У меня было много боли, связывающих приложение C++ с другой библиотекой C++ с зависимостями Fortran90 (MinGW, TDM g ++ и gfortran). Я либо должен использовать gfortran для связи, либо сбой приложений при запуске (в глобальных конструкторах, привязанных к __cxa_get_globals_fast). Однако это неприемлемо, я хотел бы использовать g ++ для компоновки (Qt GUI).Как и когда выполняется статическое связывание (MinGW)?
Мне кажется, что зависимости библиотек не могут быть скомпонованы статически с НКУ, компоновка выполняется только тогда, когдаmain()
доступен. Зачем?
Я думаю, частично потому, что код для определенных инициализаций должен быть вставлен перед main().
Почему статически связанное приложение нуждается в DLL-файлах, таких как mingwm10.dll или pthreadGCE2.dll во время выполнения? Почему они не могут быть статически связаны?
UPDATE: Я только что нашел эти сайты:
http://www.deer-run.com/~hal/sol-static.txt
http://www.iecc.com/linker/
Вы имеете в виду это? Основная программа Non-Fortran: http://gcc.gnu.org/onlinedocs/gfortran/Non_002dFortran-Main-Program.html Вот обратная ссылка моего приложения: # 0 0x00777520 в глобальных конструкторах, привязанных к __cxa_get_globals_fast() # 1 0x0077ef87 в __do_global_ctors() # 2 0x0040122a в __mingw_CRTStartup() # 3 0x00401298 в mainCRTStartup() – Ali 2010-12-10 12:49:42