вставлять ошибку времени выполнения lua: символ не найден: _luaL_newstate - PullRequest
0 голосов
/ 18 декабря 2011

мой код

inline int DOFILE(string& filename) {

  printf("lua_open\n");
  /* initialize Lua */
  lua_State* L = lua_open();

  printf("lua_openlibs\n");
  /* load Lua base libraries */
  luaL_openlibs(L);

  printf("lua_dofile\n");
  /* run the script */
  int ret = luaL_dofile(L, filename.c_str());

  printf("lua_close\n");
  /* cleanup Lua */
  lua_close(L);

  return ret; 
}

опции компиляции:

obj.cxxflags = ["-g", "-D_FILE_OFFSET_BITS=64", "-D_LARGEFILE_SOURCE", "-Wall", "-llua-5.1"]

также пробовал '-llua', '-llualib', все они сообщают о предупреждении

i686-apple-darwin11-llvm-g++-4.2: -llua-5.1: linker input file unused because linking not done

Когда я бегу, он сообщает:

lua_open
dyld: lazy symbol binding failed: Symbol not found: _luaL_newstate
  Referenced from: /Users/gl/workspace/node-lua/build/Release/node_lua.node
  Expected in: flat namespace

dyld: Symbol not found: _luaL_newstate
  Referenced from: /Users/gl/workspace/node-lua/build/Release/node_lua.node
  Expected in: flat namespace

1 Ответ

1 голос
/ 18 декабря 2011

Вы должны использовать параметр obj.ldflags для библиотек.

Используемый инструмент сборки создает свои двоичные файлы в два этапа:

  1. compile
  2. link

На этапе компиляции используются флаги компилятора obj.cxxflags.Библиотеки не нужны для компиляции, поэтому передача флагов компоновщика (-lfoo) в них бесполезна - компилятор их вообще не использует (отсюда и предупреждения).

В шаге ссылки должны использоваться оба obj.cxxflags и obj.ldflags.(ld - это имя компоновщика.)

(Очень просто для очень простого кода выполнять компиляцию и компоновку одновременно, например, с g++ -o thing thing.cpp -lpthread.Но для больших сборок разделение компиляции и компоновки обычно.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...