Создавая подключаемый модуль браузера NPAPI в Linux x86 и x86_64, как мне убедиться, что он загружает правильную версию своих зависимых библиотек?

Я пытаюсь создать плагин для браузера Linux с помощью Firebreath, который работает на 32-битной и 64-битной Linux.

В моем X11/projectDef.cmake у меня есть

target_link_libraries(${PROJECT_NAME}
    ${PLUGIN_INTERNAL_DEPS}
    "${CMAKE_CURRENT_SOURCE_DIR}/lib/libOIS-1.4.0_32.so"
    )

В настоящее время я просто вручную меняю эту строку, переключая 32 на 64, когда хочу сделать другую сборку, так что, вероятно, это неправильно. Но моя проблема в том, что даже когда я создаю 32-битную библиотеку и она успешно компилируется, я получаю следующую ошибку при попытке загрузить плагин в Firefox:

$ firefox
LoadPlugin: failed to initialize shared library /home/daniel/.mozilla/plugins/npBoomstickJavaScriptJoystickSupport.so [libOIS-1.4.0.so: wrong ELF class: ELFCLASS64]

Как настроить cmake для автоматического включения правильной библиотеки в зависимости от архитектуры? Есть ли способ одновременно собрать x86 и x86_64 на одной машине? Как мне заставить плагин загружаться правильно или есть способ отладить эту проблему?


person Daniel X Moore    schedule 20.07.2011    source источник


Ответы (1)


Насколько я знаю, единственный способ собрать 32-битную версию на 64-битной машине — использовать кросс-компиляцию: http://www.vtk.org/Wiki/CMake_Cross_Compiling

На самом деле я никогда не пробовал это, но внутри CMake вы можете вероятно использовать CMAKE_SIZEOF_VOID_P, который будет равен 4 в 32-битном режиме и 8 в 64-битном. Вы можете добавить if в свой скрипт cmake, чтобы установить правильные двоичные файлы в зависимости от их размера.

person taxilian    schedule 20.07.2011