mingw,交叉编译,gcc

时间:2011-05-08 17:58:59

标签: gcc mingw flex-lexer

某些背景信息:

  • 我的程序使用libary libfl.a(flex库)。 我在linux下编译它:

      

    gcc lex.yy.c -lfl

  • 我安装了mingw编译器i586-mingw32msvc-gcc(简单的'hello world'东西编译没有问题)

  • 我使用ubuntu(可能没关系)

  • 我想在linux下编译windows(生成可在windows上使用的二进制.exe文件)

我的问题和疑问:

当我尝试编译我的程序时

  

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

我收到错误:

[...] undefined reference to '_yywrap' 
[...] undefined reference to '_WinMain@16'
  1. 我是否正确理解我必须使用i586-mingw32msvc-gcc编译libfl.a的内容才能在此交叉编译中使用它?
  2. 在源代码中有函数yywrap(),但不是_yywrap()。为什么我使用下划线_
  3. 来获取函数错误
  4. _WinMain@16有什么关系? (源代码中没有用法)
  5. 我的目标是了解这里发生的事情。 如果我让它工作,那么它的奖励积分:)

    感谢任何帮助

1 个答案:

答案 0 :(得分:2)

  1. 是的,当然。这就是原因:
  2. C ++在函数名称(称为名称修改)中编码有关函数的附加语义信息,例如命名空间/类亲和性,参数类型等。因此,C ++库名称与您在源代码中看到的有些不同。并且每个编译器都以它自己的方式完成它,这就是为什么通常你无法链接使用不同编译器构建的库的C ++函数(C函数名称不会被破坏)。
  3. 判断修改样式时,未定义的符号由Microsoft C ++编译器引入。我不知道为什么它需要WinMain,但是在用它重新编译lib之后,所有这些错误都可能会消失。是的:也许WinMain()的东西从msvc上升而不是使用main(),这对于格式良好的程序来说是必须的吗? ;)