#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: Вы правы.