Проблема в том, что вы назвали библиотеки в командной строке ссылки перед объектными файлами, которые в них нуждаются.Компоновщик загружает модули слева направо в командной строке.В точке на линии, где вы называете -llua51
, неизвестные символы, которые могли бы быть удовлетворены этой библиотекой, не известны.Затем вы называете li.o
, у которого есть неизвестные символы.
В некоторых Unix-подобных средах это не рассматривается как ошибка, поскольку часть процесса компоновки откладывается до загрузки программы при ссылке на .so
файлы удовлетворены.Но Cygwin, MinGW и Windows в целом должны воспринимать это как ошибку, поскольку библиотеки DLL работают совершенно иначе, чем .so
файлы.
Решение состоит в том, чтобы поставить -llua51
после всех .o
файлов в вашей линии связи.
Редактировать: Кстати, похоже, вы ссылаетесь на дистрибутив Lua для Windows, но собираете его с GCC под Cygwin.Вы захотите использовать Dependency Walker , чтобы убедиться, что ваша программа не зависит от времени выполнения Cygwin, и что она зависит от того же времени выполнения C, что и lua51.dll из Lua для Windows.IIRC, это будет среда выполнения для предыдущей версии Visual Studio.Можно сделать ссылку GCC против этого, но вам нужно будет использовать порт MinGW (который вы можете использовать из Cygwin), и связать пару определенных библиотек, чтобы получить эту версию.Я далеко от моего обычного ПК, или я бы процитировал точную линию связи.(Я считаю, что вам нужно -lmoldname -lmsvcr80
или что-то в этом роде в качестве последних элементов в строке ссылки.)
Это приведет к таинственным и очень трудным диагностировать проблемы, если используется более одной библиотеки времени выполнения C.Простой ответ - использовать ту же самую, что и предпочитаемая вами Lua DLL.Другой альтернативой является то, что проект Lua Binaries имеет предварительно скомпилированные библиотеки Lua DLL для широкого набора инструментов C на Windows.Если вам нужно приложение Lua, которое понимает среду Cygwin, вам нужно приложение, созданное GCC для Cygwin, а не Lua для Windows.Lua Binaries будет вашим другом, или вы можете создать Lua самостоятельно из источника.