AIX xlC кросс-компиляция / связывание для C++, не находящего символы C

Я пытаюсь выполнить кросс-компиляцию в 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 long), .socket(int,int,int), .connect(int,const sockaddr*, без подписи)

Я обнаружил, что отсутствующие символы взяты из стандартной библиотеки c, libc.a. Когда я посмотрел на символы с nm для файла libc.a, который подбирается, символы действительно существуют. Я предполагаю, что может быть проблема с тем, что C++ не может читать объекты C, но я действительно стреляю в темноте.

2 ответа

Решение

Звучит так, будто это может быть проблема искажения имени в C++.

Бежать nm в объектных файлах, чтобы узнать символы, которые они ищут. Затем сравните точные имена с библиотеками.

Затем проверьте команды компиляции, чтобы убедиться, что включена правильная версия заголовочных файлов - может быть, она включает в себя копию родительской ОС по ошибке?

В конце концов я смог обойти это. Похоже, я использовал компилятор C++ для.c файлов. Использование компилятора xlc вместо компилятора xlC для файлов C решило эту проблему.

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