PDA

View Full Version : خطا زمان کامپایل کردن Lua در C



sedamorde
دوشنبه 06 دی 1395, 18:57 عصر
سلام،

من کتابخانه Lua 5.3.3 را در Ubuntu نصب کردم و یک کد به شکل زیر نوشتم :





#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
int main(void)
{
lua_State *L = luaL_newstate();
luaL_openlibs(L);
luaL_dofile(L, "/home/test/test.lua");
lua_close(L);
return 0;
}







این کد با دستور خط فرمان زیر بدون هیچ مشکلی کامپایل میشه و کار میکنه :




gcc /home/test/src/main.c -llua -ldl -lm -o /home/test/test.o


اما زمانی که از فایل CMakeLists.text استفاده میکنم (به صورت زیر) خطا بوجود میاد؟؟





cmake_minimum_required(VERSION 2.8)

project(testc C)

set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_C_FLAGS} -llua -ldl -lm")

file(GLOB headers RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} src/*.h)

add_executable(testc src/main.c)target_link_libraries(testc ${LUA_LIBRARIES})

install(TARGETS testc DESTINATION ${CMAKE_CURRENT_SOURCE_DIR})



خطا :





[ 50%] Building C object CMakeFiles/testc.dir/src/main.c.o
[100%] Linking C executable testc
CMakeFiles/testc.dir/src/main.c.o: In function `main':
main.c:(.text+0x9): undefined reference to `luaL_newstate'
main.c:(.text+0x19): undefined reference to `luaL_openlibs'
main.c:(.text+0x2f): undefined reference to `luaL_loadfilex'
main.c:(.text+0x5a): undefined reference to `lua_pcallk'
main.c:(.text+0x6b): undefined reference to `lua_close'



آیا کسی متوجه خطای من میشه؟

متشکرم.

maarek
چهارشنبه 08 دی 1395, 08:27 صبح
سلام،
مشکل تو دسترسی به کتابخونه هست مسیرش رو درست وارد میکنی ؟
وقتی از این پارامتر استفاده میکنی :

-llua -ldl -lm

باید کتابخونه که ازش استفاده کردی توی همون دایرکتوری باشه که سورست هست اگه جایی دیگه قرار داره باید path کتابخونه رو هم وارد کنی.. اینطوری :

-L/home/ch/Desktop/root/lib

sedamorde
چهارشنبه 08 دی 1395, 16:14 عصر
دوست عزیز ممنون از راهنمایی شما.

درسته مشکل در دسترسی به کتابخانه است و فکر کنم اشتباه من هم در لینک دهی به این کتابخانه است.

اما نکته مبهم برای من اینجاست که؛ زمانی که از Command line استفاده می‌کنم خطایی پیش نمیاد و برنامه بدون خطا کامپایل میشه و کار میکنه. در واقع -llua آدرس کتابخانه است و نیازی هم به -L نیست.
ولی وقتی از CMakeList استفاده می‌کنم خطا پیش میاد. با اینکه از دستور زیر استفاده می‌کنم :‌




set(CMAKE_C_FLAGS "-llua -ldl -lm ${CMAKE_C_FLAGS}")



ممنون میشم از شما (و دیگر دوستان) اگر برای من مثالی بزنید که در یک فایل CMakeList چطوری باید به یک کتابخانه لینک بدهم.


متشکرم.

sedamorde
چهارشنبه 08 دی 1395, 19:14 عصر
maarek عزیز راهنمای شما کمک کرد.
مشکل حل شد. با این کد!



find_package(Lua REQUIRED)


ممنون.