在Windows上编译libyaml

所以,我正在开发一个运行
Linux的强大项目,我需要在Windows上创建端口.问题是,libyaml是我的依赖项的一部分,我需要为Windows编译它.

所以我运行了cygwin环境,运行了./configure和make,一切顺利:库已经构建,我得到了.a文件.

除了makefile从未结束,因为它无法构建示例:结果是库中缺少一些符号:

undefined reference to `_imp__yaml_parser_initialize'
undefined reference to `_imp__yaml_parser_set_input_file'
undefined reference to `_imp__yaml_parser_scan'
undefined reference to `_imp__yaml_token_delete'
undefined reference to `_imp__yaml_parser_delete'

所以当然,想知道这怎么可能是真的,我继续搜索所说的符号,事实上,我发现它们是二进制的,尽管符号有点不同,你可以看到:

$nm src/.libs/libyaml.a | grep parser_set_input_file
000005a8 T _yaml_parser_set_input_file

因此,这通常是在编译dinamicaly可加载库时如何呈现函数名称.让我感到困惑的是,为什么链接器找不到这些功能呢?这来自哪里?

我能做些什么才能使我的程序能够正确链接到libyaml?除了这些功能之外,其他所有功能都正常工作.

你会成为那个拯救我脱离这种恶魔般的连环东西的人吗?
我感谢你的关注.

编辑:我现在已经在这个问题上工作了几个小时.
所以,显然它可能来自mingw:来自cygwin的gcc在编译示例时没有任何问题.
但是,即使我尝试使用cygwin的gcc,错误仍然存​​在.我开始厌倦这个迟钝的操作系统了.每当我在Windows上开发时,我花费更多时间来解决问题,而不是实际工作.为什么总是这么痛?

是不是有一种简单的方法来解释链接器不搜索那些函数的错位名称?

编辑:我发现了这个:
http://cygwin.com/ml/cygwin/2001-04/msg00942.html
看起来像是一个与ncurses有关的类似问题.虽然我无法做出任何改变.

最佳答案 旧线程,但答案仍不清楚.以下适用于版本0.1.5:

./configure CFLAGS="-DYAML_DECLARE_STATIC" --enable-static --disable-shared
点赞