Помощь по компиляции в AIX

Есть ли сайт, где я могу найти символы, используемые в конкретной библиотеке и ее версии. Например, я пытаюсь скомпилировать некоторый код в 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 ответа

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

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

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

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

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

Это потому, что вы использовали 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

Перечисленные внешние символы взяты из libgcc так что добавьте -lgccверно. А такжеregister_frame также является частью libgccно только для 32-битных. Убедитесь, что вы используете один и тот же режим битовой глубины для вашего компилятора, компоновщика и библиотек.

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

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

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

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

Другие вопросы по тегам