AIX XLC Cross-Compilation / Scancage для C ++ не нахождение символов C
-
30-09-2019 - |
Вопрос
Я пытаюсь пересечь с компиляцией AIX с компиляторами XLC / XLC.
Код успешно компилируется, когда он использует настройки по умолчанию на другом компьютере. Код на самом деле успешно компилируется с помощью кросс-компиляции, но проблема исходит от линкера. Это команда, которая связывает объекты вместе:
$(CHILD_OS)/usr/vacpp/bin/xlC -q32 -qnolib -brtl -o $(EXECUTABLE) $(OBJECT_FILES)
-L$(CHILD_OS)/usr/lib
-L$(CHILD_OS)/usr/vacpp/lib/profiled
-L$(CHILD_OS)/usr/vacpp/lib
-L$(CHILD_OS)/usr/vac/lib
-L$(CHILD_OS)/usr/lib
-lc -lC -lnsl -lpthread
-F$(CHILD_OS)$(CUSTOM_CONFIG_FILE_LOCATION)
Когда я пытаюсь связать код, я получаю несколько неопределенных символов: .setsockopt (int, int, int, const void *, unsigned), .socket (int, int, int) ,.connect (int, const sockaddr *, без знаки длинные) и т. д.
Я обнаружил, что отсутствуют символы из стандартной библиотеки C, libc.a. Когда я посмотрел на символы с NM для Libc.a, который поднимается, символы действительно существуют. Я предполагаю, что может быть проблема с C ++, не в состоянии прочитать объекты C, но я действительно стреляю в темноте.
Решение
Звук, как это может быть проблемой на имя C ++.
Бегать nm
На объектных файлах, чтобы узнать символы, которые они ищут. Затем сравните точные имена против библиотек.
Затем проверьте команды компиляции, чтобы убедиться, что правильная версия файлов заголовка входит - может быть, это включает в себя копию родительской ОС по ошибке?
Другие советы
Я в конечном итоге смог обойти это. Похоже, что я использовал компилятор C ++ для файлов .c. Использование компилятора XLC вместо компилятора XLC для файлов C исправили эту проблему.