AFAIK движок Quake3 (который используется для Urban Terror) реализует настраиваемую динамическую систему загрузчика OpenGL, то есть двоичный файл не связывается непосредственно с libGL.so , но использует dlopen
для загрузки libGL.so , затем dlsym
, чтобы получить все символы OpenGL. Чтобы избежать конфликтов с любым напрямую связанным кодом, все внутренние символы имеют префикс «пространство имен».
Однако переменная окружения LD_PRELOAD
не будет иметь никакого эффекта. Чтобы подключиться к динамически загружаемым библиотекам, вам придется сделать несколько хитростей. Есть несколько возможностей. Я также рекомендую перехватывать вызовы dlopen
и dlsym
, а для функций, к которым вы собираетесь подключиться, возвращайте батут (который в конечном итоге вызовет запрошенную функцию), вместо этого возвращая указатель функции напрямую.
Кстати: хорошо, что вы задали этот вопрос сейчас, так как я собираюсь написать аналогичную предварительную загрузку libGL.so
в качестве поддержки оконного композитора, над которым я работаю; и я, вероятно, попал в ту же ловушку.