Компиляция libyaml на Windows - PullRequest
       7

Компиляция libyaml на Windows

4 голосов
/ 31 января 2012

Итак, я разрабатывал потрясающий проект под управлением Linux, и мне нужно сделать порт для Windows. Проблема в том, что libyaml является частью моих зависимостей, и мне нужно скомпилировать его для Windows.

Итак, я запустил мою среду cygwin, запустил ./configure и make, и все прошло хорошо: библиотека была собрана, я получил файл .a.

За исключением того, что make-файл никогда не заканчивался, потому что он не мог собрать примеры: оказывается, некоторые символы отсутствуют в библиотеке:

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

Таким образом, обычно, как представляется имя функции, когда я компилирую динамически загружаемую библиотеку. Что меня раздражает, ПОЧЕМУ компоновщик не может найти эти функции? Откуда взялся этот imp ?

А что я могу сделать, чтобы мои программы могли правильно связываться с libyaml? Все остальное работает так, как должно, за исключением этих функций.

Будете ли вы тем, кто спасет меня от этой дьявольской компиляции? Я благодарю тебя за внимание.

РЕДАКТИРОВАТЬ: Я работал над этой проблемой в течение еще нескольких часов. Так что, очевидно, это МОЖЕТ от mingw: у gcc из cygwin нет проблем при компиляции примеров. Однако ошибки остаются, даже если я пытаюсь сделать это с помощью gg cygwin. Я начинаю заболеть этой отсталой ОС. Каждый раз, когда я занимаюсь разработкой под Windows, я трачу больше времени на решение проблем, чем на работу. Почему это всегда должно быть такой болью?

Нет ли ЛЕГКОГО способа объяснить компоновщику, что он не ищет искаженное имя этих функций?

РЕДАКТИРОВАТЬ: Я нашел это: http://cygwin.com/ml/cygwin/2001-04/msg00942.html Похоже, похожая проблема у кого-то с ncurses. Хотя я не смог ничего из этого сделать.

1 Ответ

2 голосов
/ 06 февраля 2015

Старая тема, но ответ до сих пор неясен.Следующее работает для версии 0.1.5:

./configure CFLAGS="-DYAML_DECLARE_STATIC" --enable-static --disable-shared
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...