因此,我正在开发一个运行Linux的了不起的项目,我需要在Windows上实现这个端口。问题是,libyaml是我的依赖项的一部分,我需要为Windows编译它。
于是我开始运行我的cygwin环境,运行./配置和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,我能做什么呢?除了这些功能之外,其他一切都在正常工作。
你愿意把我从这个邪恶的编译链接中救出来吗?我感谢你的关注。
编辑:我已经为这个问题做了几个小时了。所以,很明显,它可能来自于交融:来自西格温的gcc在编写这些例子时没有任何问题。然而,这些错误仍然存在,即使我试图这样做与雪佛兰的gcc。我开始讨厌这个弱智的操作系统了。每次我在Windows上开发时,我花更多的时间解决问题,而不是实际工作。为什么总是这么痛苦?
难道没有一种简单的方法可以解释链接器,而不是搜索那些函数的损坏名称吗?
编辑:我发现:http://cygwin.com/ml/cygwin/2001-04/msg00942.html似乎是一个类似的问题,有人在诅咒。虽然我还没能从这件事中得到什么。
发布于 2015-02-06 20:04:51
旧线,但答案仍不清楚。以下是0.1.5版的工作内容:
./configure CFLAGS="-DYAML_DECLARE_STATIC" --enable-static --disable-sharedhttps://stackoverflow.com/questions/9072178
复制相似问题