AIX XLC Cross-Compilation / Scancage для C ++ не нахождение символов C

StackOverflow https://stackoverflow.com/questions/2685338

Вопрос

Я пытаюсь пересечь с компиляцией 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 исправили эту проблему.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top