Mingw, кросс-компиляция, GCC - PullRequest
2 голосов
/ 08 мая 2011

Некоторый контекст:

  • В моей программе используется библиотека libfl.a (библиотека flex ). Я компилирую его под Linux:

    gcc lex.yy.c -lfl

  • У меня установлен компилятор mingw i586-mingw32msvc-gcc (простой материал 'hello world' компилируется без проблем)

  • Я использую Ubuntu (вероятно, не имеет значения)

  • Я хочу скомпилировать под Linux для Windows (создайте двоичный файл .exe, который будет использоваться в Windows)

Моя проблема и вопросы:

Когда я пытаюсь скомпилировать свою программу

i586-mingw32msvc-gcc lex.yy.c -lfl

Я получаю ошибки:

[...] undefined reference to '_yywrap' 
[...] undefined reference to '_WinMain@16'
  1. Правильно ли я понимаю, что я должен скомпилировать содержимое libfl.a также с i586-mingw32msvc-gcc, чтобы иметь возможность использовать его в этой кросс-компиляции?
  2. В исходном коде есть функция yywrap(), но не _yywrap(). Почему я получаю ошибку для функции с подчеркиванием _?
  3. Что случилось с _WinMain@16? (не используется в исходном коде)

Моя цель - понять, что здесь происходит. Если я заставлю его работать, то его бонусные баллы:)

Любая помощь приветствуется

1 Ответ

2 голосов
/ 08 мая 2011
  1. Да, конечно.И вот почему:
  2. C ++ кодирует дополнительную семантическую информацию о таких функциях, как сходство пространства имен / класса, типы параметров и т. Д. В имени функции (которое называется искажением имени).Таким образом, имена библиотек C ++ несколько отличаются от того, что вы видите в исходном коде.И каждый компилятор делает это по-своему, поэтому, как правило, вы не можете ссылаться на функции C ++ (имена функций C все еще не искажены) библиотеки, созданной с использованием другого компилятора.В манглинг-стиле неопределенные символы вводятся компилятором Microsoft C ++.Я не знаю точно, зачем ему нужен WinMain, но после того, как вы перекомпилируете библиотеки с ним, все эти ошибки, вероятно, исчезнут.И да: может быть, WinMain () поднимается из msvc, используя его вместо main (), какое присутствие обязательно для правильно сформированной программы?;)
...