В настоящее время я портирую проект с несколькими сотнями файлов кода и зависимостей на несколько сторонних библиотек на Mac Os. Я наконец дошел до того, что программа компилируется без предупреждений или ошибок, но, похоже, она не выполняет мою основную функцию.
Вместо этого кажется, что он выполняет какую-то другую основную функцию, которая принадлежит третьей стороне. Эта функция записывает некоторые диагностические данные в консоль и затем завершает работу:
(gdb) continue
Current language: auto; currently c++
//
// This is an automatically generated file.
// Do not edit.
//
const unsigned short expTable[] =
{
0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00,
...
0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00,
};
Debugger stopped.
Program exited with status value:0.
Я не могу использовать отладчик, чтобы узнать, где находится эта основная функция, потому что, хотя трассировка стека кажется действительной, GDB не показывает мне правильный номер строки и имя файла для каждой записи стека (см. это нерешенный вопрос для деталей).
Поиск занял несколько минут, но не дал результатов.
Мой проект использует SDL среди других библиотек, но я награждаюсь SDL_Main () и лежащими в его основе проблемами и построил мой проект поверх прекрасно работающего шаблона проекта SDL. Поэтому я совершенно уверен, что моя собственная функция main действительна.
У вас есть идеи, что может пойти не так? В настоящее время у меня нет идей, как найти и удалить основную функцию мошенника.
Спасибо
Адриан
РЕДАКТИРОВАТЬ: Как я только что узнал, я сделал ошибку при поиске файлов со строкой «Это автоматически сгенерировано». Я только что нашел несколько дюжин файлов с одинаковой строкой, все принадлежащие FreeImage, одной из сторонних библиотек, которые я использую. Итак, проблема, похоже, связана с FreeImage, но я до сих пор не уверен, что делать дальше, так как я скомпилировал Freeimage как библиотеку с приложенным make-файлом MacOs и включил только библиотеку. Я постараюсь пересобрать более новую версию FreeImage и посмотреть, исправит ли это мою проблему.