Skip to content

Commit f630b1d

Browse files
krajclaude
andcommitted
sysdig: Use LuaJIT headers to match the linked LuaJIT library
csysdig fails to link when stock Lua is also present in the sysroot: ld.lld: error: undefined symbol: luaL_openselectedlibs >>> referenced by chisel.cpp:1190 ld.lld: error: undefined symbol: lua_pcallk ld.lld: error: undefined symbol: lua_setglobal sysdig's chisel code does #include "lua.h" and links against LuaJIT (lua${JIT}), but the recipe-sysroot also carries stock Lua headers (openembedded-core lua installs lua.h into ${includedir}). Those headers win the include search over ${includedir}/luajit-2.1, so the chisel objects are compiled against stock Lua while the binary links libluajit-5.1.so. In Lua >= 5.4.4 luaL_openlibs is a macro for luaL_openselectedlibs and lua_setglobal/lua_pcallk are real symbols, none of which LuaJIT (a Lua 5.1 ABI) provides, hence the undefined references. -DLUA_INCLUDE_DIR does not help: sysdig's luajit.cmake only consults it in its stock-Lua fallback, not when it finds LuaJIT. Prepend ${STAGING_INCDIR}/luajit-2.1 to CFLAGS/CXXFLAGS. These land in CMAKE_CXX_FLAGS, which precede CMake's generated -I includes, so LuaJIT's lua.h is found first and matches the linked library. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
1 parent bae5571 commit f630b1d

1 file changed

Lines changed: 11 additions & 2 deletions

File tree

meta-oe/recipes-extended/sysdig/sysdig_0.39.0.bb

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,18 @@ EXTRA_OECMAKE = "\
6262
-DCREATE_TEST_TARGETS=OFF \
6363
"
6464

65+
# sysdig's chisel code does #include "lua.h". The recipe-sysroot also carries
66+
# stock Lua headers (openembedded-core lua installs lua.h into ${includedir}),
67+
# which are ABI-incompatible with the LuaJIT library sysdig links against: in
68+
# Lua >= 5.4.4 luaL_openlibs is a macro for luaL_openselectedlibs and
69+
# lua_setglobal/lua_pcallk are real symbols, none of which LuaJIT provides.
70+
# sysdig's luajit.cmake only honours LUA_INCLUDE_DIR in its stock-Lua fallback,
71+
# not when it finds LuaJIT, and the LuaJIT include dir does not win the search
72+
# order, so lua.h resolves to the stock header and the link fails. Put the
73+
# LuaJIT include dir first so its lua.h is used and matches the linked library.
6574
#Add include dir to find driver_config.h
66-
CXXFLAGS:append = " -I${WORKDIR}/driver_Make/driver/src"
67-
CFLAGS:append = " -I${WORKDIR}/driver_Make/driver/src"
75+
CXXFLAGS:append = " -I${STAGING_INCDIR}/luajit-2.1 -I${WORKDIR}/driver_Make/driver/src"
76+
CFLAGS:append = " -I${STAGING_INCDIR}/luajit-2.1 -I${WORKDIR}/driver_Make/driver/src"
6877

6978
#To fix do_package QA Issue
7079
do_compile:append() {

0 commit comments

Comments
 (0)