На 64-битном хосте Я пытаюсь создать общие библиотеки с опцией -m32
. Возможно ли, чтобы эти библиотеки были связаны с обычными 64-битными библиотеками?GCC -m32 flag:/usr/bin/ld: пропуск несовместим
Я делаю что-то вроде этого:
g++ -m32 -shared source.cpp -l 64_bit_library.so -o 32_bit_library.so
и получать сообщения об ошибках, как это:
/usr/bin/ld: skipping incompatible 64_bit_library.so
Так что мой вопрос: как 64_bit_library.so
и 32_bit_library.so
должен быть составлен на 64-битном хосте, к сделать так, чтобы 32_bit_library.so
был связан с 64_bit_library.so
?
Если бы вы были очень осторожны, вы могли бы сыграть в некоторые игры с typedef, mmap с флагом MAP_32BIT и сегментами разделяемой памяти, но это ужасно много хлопот! – Flexo
Можете ли вы сказать, как проверить, что это несовместимо? возможно, с помощью readelf? - http://rzr.online.fr/q/gcc – RzR
@rzr - Самый простой способ проверить - просто использовать команду 'file' на общему объекте и посмотреть, соответствует ли оно тому, что вы пытаетесь делать с gcc. Например, вы можете работать с 'readelf -h' или' objdump -x', но я считаю, что вывод 'file' будет более кратким. – Flexo