Компиляция/связывание кода COBOL на RHEL 8.6, который компилируется нормально, но затем, когда он пытается связать, я получаю сообщение об ошибке с одной из переменных: cob2 -F//etc/cob2.cfg -v <cobolprog.cbl> -L/lib64 -ldb2 -I/include/cobol_a/ -q"size(16384K) -o cobolprog
Вывод /usr/bin/ld: пропуск несовместимых lib64/libdb2.so при поиске -ldb2 /usr/bin/ld: не удается найти -ldb2 Если я удалю -ldb2, я получу «неопределенную ссылку на SQLGSTRT», «SQLGALOC и т. д.».
Когда я пробую это с lib32 и -ldb2, я не вижу проблем?
Я пытался использовать -q64 в строке cmd, но, видимо, это не поддерживается в Linux.
Db2level Информационные токены: "DB2 v11.5.0.0", "s1906101300", "DYN1906101300AMD64" и пакет исправлений "0". Продукт установлен в "/opt/IBM/db2/V11.5"
Cob2 -V Программа cob2 Версия 1.1.0 Построен Пн Сен 27 10:39:30 2021
Пробовал 32-битный, который отлично компилирует кобол, но теперь, похоже, возникла проблема со связыванием статической библиотеки, которая мне нужна: /usr/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib/Scrtl.0(.text+0x1c): неразрешимое перемещение R_386_GOTOFF против символ '__libc_csu_fini'
Версия клиента db2 — V11.5.
Не используйте комментарии для добавления фактов, потому что комментарии недоступны для поиска. От вас нужно два факта. (1) Пожалуйста, отредактируйте свой вопрос, указав полный текстовый вывод команды db2level (он находится в каталоге bin клиента db2 на том же хосте, где вы видите сообщение). Недостаточно написать только название версии. (2) пожалуйста, покажите простой текстовый вывод команды cobc -V. Поймите, что разрядность набора инструментов cobol должна соответствовать разрядности и архитектуре библиотеки .so.
Похоже, что в выводе db2level отсутствует необходимая информация (разрядность и архитектура). Вы получаете сообщение от ld, потому что разрядность/архитектура предоставленной библиотеки не соответствует запрошенной, поэтому она пропускает библиотеку. Отдельно я вижу, что вы используете «fixpack 0» версии 11.5, что всегда является ошибкой, поэтому вам следует как можно скорее обновиться до текущего пакета исправлений (на февраль 2023 г. это версия 11.5.8.0, доступная через ibm.com/ поддержка/страницы/узел/6830623
Метка gcc неверна, вы можете отказаться от нее. Как отмечено в реальном ответе: IBM COBOL на x86 - это только 32-битный продукт, если вы хотите, чтобы 64-битный переключился на GnuCOBOL, компилируя с «cobc -std = ibm».
В настоящее время пробую 32-битную версию, которая отлично компилирует кобол, но теперь, похоже, возникла проблема со связыванием статической библиотеки, которая мне нужна:
/usr/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib/Scrtl.0(.text+0x1c): неразрешимый R_386_GOTOFF перемещение по символу '__libc_csu_fini'
Не злоупотребляйте вопросами stackoverflow, добавляя новый другой симптом к ранее отвеченному вопросу, который имеет совершенно другой симптом. Вместо этого создайте новый вопрос и поместите все соответствующие детали в этот новый вопрос.
Похоже, вы используете IBM COBOL для Linux на платформе x86 версии 1.1.
Согласно документации IBM по этой ссылке параметр компилятора ADDR указывает, следует ли создавать 32-разрядный или 64-разрядный объектный файл.
Кроме того, поскольку вы используете версию 1.1 (в настоящее время доступна версия на февраль 2023 г.), в документации также есть это конкретное соответствующее примечание:
Примечание. Опции ADDR(64) и -q64 в настоящее время не поддерживаются. компилятор принимает и игнорирует эти параметры и по умолчанию использует ADDR(32).
Это означает, что ваш объектный файл 32-битный, но вы пытаетесь связать (ld) с 64-битными библиотеками Db2, и, следовательно, ld пропускает несовместимую библиотеку с сообщением, которое вы видите. Вместо этого вам следует связать 32-разрядные библиотеки Db2, они находятся в каталоге lib32 клиента Db2, поэтому укажите это в параметрах командной строки.
Пожалуйста, отредактируйте свой вопрос, добавив важные ФАКТЫ, в частности, какая у вас версия клиента db2? (т. е. вставьте обычный текстовый вывод своей команды db2level в свой вопрос). также ваша версия gcc.