所以,我正在开发一个运行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可加载库时如何呈现函数名称。让我感到困惑的是,为什么链接器找不到这些功能呢? imp 来自哪里?
我能做些什么才能使我的程序正确链接到libyaml?除了这些功能之外,其他所有功能都正常工作。
你会成为那个拯救我脱离这种恶魔般的连接东西的人吗? 我感谢你的关注。
编辑:我现在已经在这个问题上工作了几个小时。 所以,显然它 MAY 来自mingw:来自cygwin的gcc在编译示例时没有任何问题。 但是,即使我尝试使用cygwin的gcc,错误仍然存在。我开始厌倦这个迟钝的操作系统了。每当我在Windows上开发时,我花费更多时间来解决问题,而不是实际工作。为什么总是这么痛苦?是不是有一种简单的方法来解释链接器不搜索这些函数的错位名称?
编辑:我发现了这个: http://cygwin.com/ml/cygwin/2001-04/msg00942.html 看起来像是一个与ncurses有关的类似问题。虽然我无法做出任何改变。答案 0 :(得分:2)
旧线程,但答案仍不清楚。以下适用于版本0.1.5:
./configure CFLAGS="-DYAML_DECLARE_STATIC" --enable-static --disable-shared