Помощь по компиляции в AIX - PullRequest
1 голос
/ 17 февраля 2009

Есть ли сайт, где я могу найти символы, используемые в конкретной библиотеке и ее версии. Например, Я пытаюсь скомпилировать некоторый код в AIX, используя gcc, и он выбрасывает меня много неопределенных ошибок символов Например, вот вывод:

ld: 0711-317 ERROR: Undefined symbol: .__fixdfdi
ld: 0711-317 ERROR: Undefined symbol: .__divdi3
ld: 0711-317 ERROR: Undefined symbol: .__moddi3
ld: 0711-317 ERROR: Undefined symbol: .__floatdidf
ld: 0711-317 ERROR: Undefined symbol: .__umoddi3
ld: 0711-317 ERROR: Undefined symbol: .__udivdi3
ld: 0711-317 ERROR: Undefined symbol: .__fixunsdfdi

Куда мне обратиться, чтобы найти эти символы. Если я запускаю ту же команду gcc в Linux, она работает нормально.

Я также пытался включить -lgcc, но опять же он выбрасывает неопределенные символы для некоторых register_frame ... бла-бла ... и я заболел AIX.

Буду признателен за любую помощь по этому вопросу ... и, пожалуйста, не беспокойтесь по поводу Google. Вы не окажетесь нигде.

Многие задавали такие вопросы, но не получили ответов.

Спасибо

Ответы [ 4 ]

1 голос
/ 20 июля 2017

Это потому, что вы использовали gcc для компиляции библиотеки, которую вы хотите связать с кодом, скомпилированным с xlc . Или, по крайней мере, мой случай

У вас есть 2 варианта:

  1. использовать xlc вместо gcc для всей компиляции (не смешивайте gcc и xlc)
  2. компилируется с xlc, но также вызывает библиотеки gcc, например:
sudo  find  / -name libgcc.a
/opt/freeware/lib/gcc/powerpc-ibm-aix6.1.0.0/4.2.0/libgcc.a

/opt/IBM/xlC/13.1.0/bin/xlC -g  -o MyBIN MyBIN.o  -L/usr/etctera -
 L/opt/freeware/lib/gcc/powerpc-ibm-aix6.1.0.0/4.2.0/ -lgcc -letcetera
1 голос
/ 28 марта 2009

Это математические символы. Попробуйте добавить -lm к вашей ссылке.

1 голос
/ 17 февраля 2009

Прошло много времени с тех пор, как я что-то компилировал в AIX (к счастью), и я чувствую, что вы потратили хороший год или около того, пытаясь получить JNI нашей компании и другие программные библиотеки, созданные на AIX.

Кажется, я помню, что GCC никогда не работал особенно хорошо, поскольку он всегда сталкивался с подобными ошибками. Есть ли возможность использовать собственный компилятор (xlC)?

Если мне не удастся проверить порядок ваших библиотек, это сыграет большую роль в правильной работе вещей ..

Я полагаю, что вы использовали утилиту nm для перебора всех библиотек в / usr / lib (и т. Д.), Чтобы найти, где находятся отсутствующие символы?

0 голосов
/ 17 февраля 2009

В основном вопросы:

  • Какая версия GCC?
  • Какая версия AIX у вас установлена?
  • Для какой версии AIX была создана ваша копия GCC?
  • Какой именно линией связи вы пользуетесь?

Я видел такую ​​ошибку при использовании версии GCC, скомпилированной в более ранней версии AIX. Например, если GCC был скомпилирован для AIX 4.3.3 и работает в AIX 5.x. Обычно, если GCC был скомпилирован на более высокой версии AIX, он не будет работать на более низкой версии, так что это вряд ли будет проблемой.

Еще одна (довольно маловероятная) возможность: установлен ли ваш GCC там, где он был скомпилирован, чтобы ожидать его установки? Когда вы его создаете, вы указываете (возможно неявно) место установки (по умолчанию, в /usr/local). Если ваша копия установлена ​​в другом месте, но в /usr/local есть старый GCC, а ваша копия будет установлена ​​в /usr/local, то вы можете столкнуться с такой проблемой. Это гораздо менее вероятно, чем несовпадение версий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...