我是 CMake 的新手,现在对我来说这一切都像是黑魔法。我令牌的例子来自这里!如何正确包含 Lua(5.1) lib 并将其与 CMake 链接?
示例在手工编译时工作,如
$gcc -W -Wall -g -o main main.c -I/usr/local/include -L/usr/local/lib/lua/5.1 -llua
#include <stdio.h>
#include <string.h>
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
int main(void) {
puts("lua interpretor:");
char buff[256];
int error;
lua_State *L = luaL_newstate(); /* opens Lua */
luaL_openlibs(L); /* opens the standard libraries */
while (fgets(buff, sizeof(buff), stdin) != NULL) {
error = luaL_loadbuffer(L, buff, strlen(buff), "line") ||
lua_pcall(L, 0, 0, 0);
if (error) {
fprintf(stderr, "%s", lua_tostring(L, -1));
lua_pop(L, 1); /* pop error message from the stack */
}
}
lua_close(L);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当前 CMakeList.txt 看起来像
cmake_minimum_required(VERSION 3.8)
project(test)
set(CMAKE_C_STANDARD 11)
set(SOURCE_FILES main.c)
include_directories(/usr/local/include)
add_executable(test ${SOURCE_FILES})
Run Code Online (Sandbox Code Playgroud)
和错误日志
Undefined symbols for architecture x86_64:
"_luaL_loadbufferx", referenced from:
_main in main.c.o
"_luaL_newstate", referenced from:
_main in main.c.o
"_luaL_openlibs", referenced from:
_main in main.c.o
"_lua_close", referenced from:
_main in main.c.o
"_lua_pcallk", referenced from:
_main in main.c.o
"_lua_settop", referenced from:
_main in main.c.o
"_lua_tolstring", referenced from:
_main in main.c.o
Run Code Online (Sandbox Code Playgroud)
您尚未将 Lua 库链接到可执行文件。这是使用target_link_libraries(). 不过,您首先需要找到或指定库的位置。幸运的是,Lua 附带了一个用于查找 Lua的 cmake 脚本。
project(test)
find_package(Lua51 REQUIRED)
include_directories(/usr/local/include ${LUA_INCLUDE_DIR})
set(CMAKE_C_STANDARD 11)
set(SOURCE_FILES main.c)
add_executable(test ${SOURCE_FILES})
target_link_libraries(test ${LUA_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5269 次 |
| 最近记录: |