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

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

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

Ответы [ 2 ]

1 голос
/ 22 апреля 2010

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

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

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

0 голосов
/ 15 ноября 2011

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

...