Библиотека Lua не связывает

#c #lua #g #mingw #linker-errors

#c #lua #g #mingw #компоновщик-ошибки

Вопрос:

Я получаю undefined reference to 'luaL_openlibs' , когда пытаюсь выполнить следующий код

 extern "C"
{
#include "../lib/lua.h"
#include "../lib/lualib.h"
#include "../lib/lauxlib.h"
}

int main(int argc, char *argv[])
{
    
    lua_State *L = luaL_newstate();
    luaL_openlibs(L);
    return 0;
}
  

это мой файл задач VSCode:

 {
    "tasks": [
        {
            "type": "shell",
            "label": "C/C  : g  .exe build active file",
            "command": "C:/MinGW/bin/g  .exe",
            "args": [
                "-g",
                "${workspaceFolder}\src\**.cpp",
                "-L",
                "${workspaceFolder}\lib",
                "-o",
                "${workspaceFolder}\debug\game.exe",
                "-llua54"
            ],
            "options": {
                "cwd": "C:/MinGW/bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ],
    "version": "2.0.0"
}
  

это мои файлы

 .
├── .vscode
│   ├── c_cpp_properties.json
│   └── launch.json
│   └── settings.json
│   └── tasks.json
├── debug
├── lib
│   ├── lauxlib.h
│   └── lua.h
│   └── lua.hpp
│   └── luaconf.h
│   └── lualib.h
│   └── liblua54.dll
│   └── liblua54.a
├── src
│   ├── main.cpp
  

как я вижу, я указал все необходимые параметры для компилятора. Я полный новичок в связывании библиотек, и я не знаю, чего мне не хватает.

Я также попытался переместить liblua 54.a и liblua54.dll в папку debug, но это не помогло.

Комментарии:

1. Почему вы делаете #include "../lua/lualib.h" , если lualib.h находится в каталоге, который называется lib , а не lua ? (И аналогично для других заголовков)

2. Я просто допустил ошибку при написании минимально воспроизводимого примера. это папка lib в моей программе.

3. Итак, минимальный воспроизводимый пример, который вы опубликовали здесь, — это не то, что вы на самом деле пробовали? Пожалуйста, попробуйте использовать именно то, что вы опубликовали здесь, и посмотрите, осталась ли у вас проблема.

4. Просто попробовал и получил ту же ошибку

5. Вы сами скомпилировали библиотеку Lua? Если да, то как? Если нет, то где вы это взяли?

Ответ №1:

Вы перепутали 32-разрядные и 64-разрядные версии. Если ваш gcc создает 32-разрядные исполняемые файлы, вам необходимо использовать 32-разрядные двоичные файлы из http://luabinaries.sourceforge.net/download.html , а не 64-битные версии. Когда я специально перепутал их, я получил точную ошибку, которую вы получаете, и когда я использовал правильные, она скомпилировалась нормально.

Ответ №2:

Я ожидаю, что добавление следующего к args приведенному выше поможет:

 ...
"${workspaceFolder}\lua",
"-l",
"-llua56",
 "-o",
...
  

Комментарии:

1. -l сама по себе ничего не сделает, и OP уже есть -llua54 в списке опций.

2. @Someprogrammerdude: Вы правы.