【问题标题】:Compile C99 compliant .so on Windows在 Windows 上编译符合 C99 的 .so
【发布时间】:2012-11-22 21:05:05
【问题描述】:

我正在使用 StarRuby (https://github.com/hajimehoshi/starruby) 库,并尝试将最新版本编译为 .so 文件,以便在我的 ruby​​ 项目中进行链接。

但是,在获取编译所需的库,运行extconf.rb文件制作Makefile后,发现C代码不符合C90格式,更像需要C99格式。

这是一个问题,因为 mingw 不使用 C99,而且我卡在 Windows 上。

如何将上述源代码编译成 .so 以供 Windows 上的 ruby​​ 使用?

生成文件:http://pastebin.com/raw.php?i=i2ANc82g
可以在此处找到 makefile 的确切输出:http://pastebin.com/raw.php?i=VpbmyLgy
自从回滚到 libpng 1.2:http://pastebin.com/raw.php?i=TqdeADHY

【问题讨论】:

  • 你能用V=1 运行make,这样我们就可以看到正在使用的编译器命令行是什么?
  • 你有很多关于混合声明和代码的警告,但我看到的唯一错误是./src/texture.c:329:18: error: dereferencing pointer to incomplete type(以及此后不久的一些行)。那条线上是什么?
  • @MichaelBurr:尝试设置一些详细程度时,它会输出相同的内容。
  • @DanielFischer:if (0 < infoPtr->num_palette && hasPalette) { 完整的源代码可在问题中链接的 git 存储库中找到。
  • 存在 C90 警告是因为虽然您有 -std=c99,但您也有 -Wdeclaration-after-statement。这可能来自编译 Ruby 时使用的配置。尝试将行 CONFIG['warnflags'].gsub! /-Wdeclaration-after-statement/, '' 添加到 extconf.rb 以删除警告。

标签: c ruby makefile c99 c89


【解决方案1】:

将此行添加到您的 Makefile:

$CFLAGS += " -std=c99"

【讨论】:

  • 这已经是 makefile 中的参数之一,我很抱歉没有在原始问题中包含实际的 makefile。已添加。
猜你喜欢
  • 1970-01-01
  • 2014-04-12
  • 1970-01-01
  • 2017-01-23
  • 2014-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-28
相关资源
最近更新 更多