Есть несколько способов справиться с этим, в зависимости от библиотек и их имен / местоположений:
Если оба имеют одинаковое имя (opengl32.dll), то вам нужно добавить расположение DLL-библиотеки Mesaк пути поиска, так что он ищется перед системным каталогом.Каталоги заказов проверены в подробностях здесь .Как видите, $PATH
идет последним, после системы, поэтому вы не можете просто добавить каталог к этому.Тем не менее, вы можете использовать второй шаг («Текущий каталог»), установив в рабочем каталоге путь, содержащий файлы меза.Обычно это означает запуск приложения с использованием абсолютного пути в каталоге, содержащем файлы.
Это все же не особенно приятно.Если вы можете, вы должны использовать LoadLibrary
и проверять переменную среды (OPENGL_LIBRARY_PATH
) при запуске приложения.Предполагая, что экспорт из opengl32.dll
и DLL-библиотеки Mesa одинаков, вы можете сделать что-то вроде:
void LoadExports()
{
char location[MAX_PATH];
getenv("OPENGL_LIBRARY_PATH", location);
HMODULE oglLib = LoadLibrary(location);
function1 = GetProcAddress(oglLib, "glVertex2f");
...
}
Это будет прекрасно работать, делая почти точно то, что вы хотите.
Однако,если вы хотите сделать это, вы не можете импортировать opengl32.dll
, что вы, вероятно, делаете, вам нужно динамически связывать всюду.Убедитесь, что вы не связываетесь с opengl32.lib
, и все будет в порядке.В зависимости от того, сколько функций вы используете, настройка может быть затруднена, но код можно легко написать в сценарии, и его нужно выполнить только один раз, вы также можете использовать переменные static
для кэширования результатов в течение всего срока жизни программы.Также возможно использовать разные имена функций для разных библиотек, хотя это занимает немного больше логики, поэтому я оставлю вам детали.