Как мне статически связать iconv в Windows, используя msys?

Я использую mingw gcc и msys для создания ряда утилит GNU. В прошлом у меня было много проблем, вызванных различными исполняемыми файлами, требующими разных версий libiconv, поэтому, чтобы избежать проблемы, я хотел статически связать iconv с исполняемыми файлами.

Я собрал libiconv, используя mingw и msys с configure --enable-static. Это создаст и DLL, и библиотеку импорта.dll.a, и простую статическую библиотеку.a.

Тем не менее, когда я пытаюсь создать другую программу, которая связывает с простым -liconv, я подключаю DLL. Я предполагаю, что ld по какой-то причине предпочитает библиотеку импорта статической библиотеке (в общем, неплохой выбор, особый случай).

Как я могу гарантировать, что программы, которые я создаю, статически связаны? Один из очевидных подходов - просто удалить файл.dll.a во время сборки. Это, наверное, самый простой вариант, но мне любопытно - есть ли флаг компоновщика, который я могу установить (через что-то вроде LDFLAGS), чтобы заставить iconv загружаться статически (в идеале, не затрагивая другие библиотеки, но в крайнем случае я был бы в порядке? с загрузкой всех библиотек статически)

1 ответ

Решение

Вы правы, по умолчанию он будет ссылаться на "общий доступ", если вы не укажете это специально для ссылки на статический. Вы можете сделать это несколькими способами, в зависимости от того, что работает для вас

make CC='gcc -static'
make LDFLAGS=-static
make LDFLAGS=libiconv.a

Вам просто нужно посмотреть на Makefile и найдите наименее навязчивый способ соответствовать этому.

пример

Другие вопросы по тегам