Windows — управление DLL для C ++ с MinGW?

Недавно я решил взглянуть на 2D графику с C ++, используя MinGW на Windows 7.

Поскольку мне понадобится только 2D-графика, любая библиотека будет более или менее жизнеспособной (OpenGL, SDL и т. Д.). Я решил быстро взглянуть на некоторые из них и проверить, насколько легко им будет работать над окнами с MinGW.

Вскоре я заметил, что для каждой библиотеки, которую я тестировал (Cairo, SDL и GTK +), для работы требовалось множество файлов dll. После компиляции даже простой программы из чего-то вроде учебного пособия, это даст мне 5 или 6 различных ошибок DLL, что заставит меня скопировать все из них в рабочий каталог моей программы, чтобы она могла даже работать.

Конечно, моя программа работала, но очень сложно иметь такое количество DLL просто для простой программы. Чтобы запустить программу на чужом компьютере, потребовалось бы отправить все эти DLL вместе с ним в виде отдельных файлов, а также другие библиотеки DLL, которые я установил глобально, но другие этого не делают.

Просто кажется таким странным, что что-то столь популярное, как C ++, будет так раздражать в использовании из-за всех необходимых DLL-библиотек … Я что-то не так делаю? Может ли быть какое-то волшебное решение этой проблемы? Какой-то инструмент, чтобы минимизировать или даже полностью устранить эти осложнения? Было бы здорово использовать меньшее количество библиотек DLL для моего приложения. Конечно, я не смогу полностью опустить библиотеки DLL, но, по крайней мере, уменьшить количество до одной (одна библиотека = одна библиотека DLL) или иметь возможность упорядочить их в собственной подпапке было бы здорово.

0

Решение

Конечно, моя программа работала, но очень сложно иметь такое количество DLL просто для простой программы. Чтобы запустить программу на чужом компьютере, потребовалось бы отправить все эти DLL вместе с ним в виде отдельных файлов, а также другие библиотеки DLL, которые я установил глобально, но другие этого не делают.

Если вы создаете установщик для своей программы, установщик должен позаботиться об установке DLL прямо рядом с вашей программой. Это довольно распространенная практика, и она совсем не будет неудобна для вашего пользователя. Если вы просто распространяете zip-файл со своим приложением, просто храните библиотеки DLL в папке, которую вы архивируете (это также довольно распространенная практика).

Также стоит отметить, что вам уже придется отправлять DLL вместе с вашим приложением. Нужны приложения GCC libgcc_s_sjlj-1.dll а также libstdc++-6.dll, Приложения MSVC, если я правильно помню, используют библиотеку времени выполнения Visual C ++. Еще несколько графических библиотек вряд ли будут беспокоить пользователя вообще.

Я делаю что-то не так?

Нет, мне это кажется обычным делом. Я рекомендую вам продолжить ваш проект, не беспокоясь о библиотеках DLL.

Может ли быть какое-то волшебное решение этой проблемы? Какой-то инструмент, чтобы минимизировать или даже полностью устранить эти осложнения?

Вы мог заглянуть в DLL / EXE упаковщик. Это крайне не рекомендуется, потому что антивирусы, как правило, не ценят модифицированные EXE-файлы. (Многие вредоносные программы используют методы упаковки, поэтому по умолчанию антивирусы с подозрением относятся к таким упакованным приложениям.)

по крайней мере, уменьшить количество до одного (одна библиотека = одна DLL)

технически Вы можете это сделать, но вам, вероятно, придется переписать графическую библиотеку, о которой идет речь, поскольку сейчас она настроена для нескольких библиотек DLL. Я действительно не рекомендую это также; DLL являются отдельными, потому что они должны быть. Они предлагают различную функциональность (например, быстрый взгляд на журнал изменений GTK + показал упоминания о библиотеках для SVG, JPG и других форматах файлов, а также множество бэкэндов для взаимодействия с хост-ОС, принтерами и т. Д.), Поэтому они Инкапсулированы в разные библиотеки. В некоторых случаях (libjpeg) эти «подбиблиотеки» даже пишутся другой группой, а используемая вами графическая библиотека просто вызывает определенные функции из «подбиблиотеки».

Если вы действительно настаиваете на том, чтобы иметь только одну DLL, я думаю, вам лучше поискать небольшую библиотеку с минимальной функциональностью. Так как вы просто хотите 2D-графику, вы можете сойти с рук.

или иметь возможность организовать их в собственной подпапке было бы здорово

К сожалению, вы не можете сделать это.

1

Другие решения

Других решений пока нет …