ld returned 1 exit status
🚨 错误信息
[ 94%] Linking CXX executableIC_NM_SenseMemory/output/linux_orin/bin/SenseMemoryService
cdIC_NM_SenseMemory/build_linux_orin/shell/linux/SenseMemoryService && /snap/cmake/1487/bin/cmake -E cmake_link_script CMakeFiles/SenseMemoryService.dir/link.txt --verbose=1
aarch64--glibc--stable-2022.08-1/bin/aarch64-linux-g++ -w -std=c++17 -O3 -DNDEBUG -Wl,-rpath-link=/data/gerrit/workspace_AIBox_repo/AICore/IC_NM_SenseMemory/../../Vendor/IC_NM_OrinX/output/usr/local/lib CMakeFiles/SenseMemoryService.dir/SenseMemoryService.cpp.o -oIC_NM_SenseMemory/output/linux_orin/bin/SenseMemoryService -L/data/gerrit/workspace_AIBox_repo/AICore/IC_NM_SenseMemory/output/linux_orin/lib -L/data/gerrit/workspace_AIBox_repo/AICore/IC_NM_SenseMemory/../../Vendor/IC_NM_OrinX/output/usr/local/lib -Wl,-rpath,/data/gerrit/workspace_AIBox_repo/AICore/IC_NM_SenseMemory/output/linux_orin/lib:/data/gerrit/workspace_AIBox_repo/AICore/IC_NM_SenseMemory/../../Vendor/IC_NM_OrinX/output/usr/local/lib: -lsenseauto_infrastructure -lsenseauto_sensememory -lsenseauto_sensory_memory -lsystemd -lcurl
aarch64--ld: warning: liblua.so.5, needed byIC_NM_SenseMemory/output/linux_orin/lib/libsenseauto_sensememory.so, not found (try using -rpath or -rpath-link)
aarch64--ld: warning: ../../../build_NM_DataProvider/memory_messages/libsenseauto_memory_messages.so, needed byIC_NM_SenseMemory/../../Vendor/IC_NM_OrinX/output/usr/local/lib/libsenseauto_working_memory.so, not found (try using -rpath or -rpath-link)
aarch64--ld: warning: ../../../build_NM_DataProvider/data_provider/libsenseauto_data_provider.so, needed byIC_NM_SenseMemory/../../Vendor/IC_NM_OrinX/output/usr/local/lib/libsenseauto_working_memory.so, not found (try using -rpath or -rpath-link)
aarch64--ld: warning: ../../../build_NM_DataProvider/build_SQLiteCpp/libSQLiteCpp.so, needed byIC_NM_SenseMemory/../../Vendor/IC_NM_OrinX/output/usr/local/lib/libsenseauto_working_memory.so, not found (try using -rpath or -rpath-link)
aarch64--ld: warning: ../../../build_NM_DataProvider/build_sqlite3/libsqlite3.so, needed byIC_NM_SenseMemory/../../Vendor/IC_NM_OrinX/output/usr/local/lib/libsenseauto_working_memory.so, not found (try using -rpath or -rpath-link)
aarch64--ld: warning: ../../../build_NM_SenseFlow/comImpl/libIntentFlow.so, needed byIC_NM_SenseMemory/../../Vendor/IC_NM_OrinX/output/usr/local/lib/libsenseauto_working_memory.so, not found (try using -rpath or -rpath-link)
aarch64--ld: warning: libSQLiteCpp.so.0, needed byIC_NM_SenseMemory/output/linux_orin/lib/libsenseauto_longterm_memory.so, not found (try using -rpath or -rpath-link)
aarch64--ld: warning: ../build_sqlite3/libsqlite3.so, needed byIC_NM_SenseMemory/../../Vendor/IC_NM_OrinX/output/usr/local/lib/libSQLiteCpp.so, not found (try using -rpath or -rpath-link)
aarch64--ld:IC_NM_SenseMemory/output/linux_orin/lib/libsenseauto_sensememory.so: undefined reference to `luaL_loadfilex'
aarch64--ld:IC_NM_SenseMemory/output/linux_orin/lib/libsenseauto_sensememory.so: undefined reference to `lua_setglobal'
aarch64--ld:IC_NM_SenseMemory/output/linux_orin/lib/libsenseauto_sensememory.so: undefined reference to `lua_isstring'
aarch64--ld:IC_NM_SenseMemory/output/linux_orin/lib/libsenseauto_sensememory.so: undefined reference to `lua_toboolean'
aarch64--ld:IC_NM_SenseMemory/output/linux_orin/lib/libsenseauto_sensememory.so: undefined reference to `lua_type'
aarch64--ld:IC_NM_SenseMemory/output/linux_orin/lib/libsenseauto_sensememory.so: undefined reference to `lua_tonumberx'
aarch64--ld:IC_NM_SenseMemory/output/linux_orin/lib/libsenseauto_sensememory.so: undefined reference to `lua_touserdata'
aarch64--ld:IC_NM_SenseMemory/output/linux_orin/lib/libsenseauto_sensememory.so: undefined reference to `lua_pcallk'
aarch64--ld:IC_NM_SenseMemory/output/linux_orin/lib/libsenseauto_sensememory.so: undefined reference to `lua_close'
aarch64--ld:IC_NM_SenseMemory/output/linux_orin/lib/libsenseauto_sensememory.so: undefined reference to `lua_pushcclosure'
aarch64--ld:IC_NM_SenseMemory/output/linux_orin/lib/libsenseauto_sensememory.so: undefined reference to `lua_getglobal'
aarch64--ld:IC_NM_SenseMemory/output/linux_orin/lib/libsenseauto_sensememory.so: undefined reference to `luaL_openlibs'
aarch64--ld:IC_NM_SenseMemory/output/linux_orin/lib/libsenseauto_sensememory.so: undefined reference to `luaL_newstate'
aarch64--ld:IC_NM_SenseMemory/output/linux_orin/lib/libsenseauto_sensememory.so: undefined reference to `lua_pushlightuserdata'
aarch64--ld:IC_NM_SenseMemory/output/linux_orin/lib/libsenseauto_sensememory.so: undefined reference to `lua_pushstring'
aarch64--ld:IC_NM_SenseMemory/output/linux_orin/lib/libsenseauto_sensememory.so: undefined reference to `lua_settop'
aarch64--ld:IC_NM_SenseMemory/output/linux_orin/lib/libsenseauto_sensememory.so: undefined reference to `lua_tolstring'
aarch64--ld:IC_NM_SenseMemory/output/linux_orin/lib/libsenseauto_sensememory.so: undefined reference to `lua_isnumber'
aarch64--ld:IC_NM_SenseMemory/output/linux_orin/lib/libsenseauto_sensememory.so: undefined reference to `lua_gettop'
collect2: error: ld returned 1 exit status
🤖 AI解决方案
aarch64-ld: warning: liblua.so.5, needed by IC_NM_SenseMemory/output/linux_orin/lib/libsenseauto_sensememory.so, not found (try using -rpath or -rpath-link)
aarch64-ld: warning: ../../../build_NM_DataProvider/memory_messages/libsenseauto_memory_messages.so, needed by IC_NM_SenseMemory/../../Vendor/IC_NM_OrinX/output/usr/local/lib/libsenseauto_working_memory.so, not found (try using -rpath or -rpath-link)
... (其他类似的 "not found" 警告)
aarch64-ld: IC_NM_SenseMemory/output/linux_orin/lib/libsenseauto_sensememory.so: undefined reference to `luaL_loadfilex'
aarch64-ld: IC_NM_SenseMemory/output/linux_orin/lib/libsenseauto_sensememory.so: undefined reference to `lua_setglobal'
... (其他类似的 "undefined reference" 错误)
collect2: error: ld returned 1 exit status
错误翻译:
链接器警告:liblua.so.5,被 IC_NM_SenseMemory/output/linux_orin/lib/libsenseauto_sensememory.so 所需要,但未找到(尝试使用 -rpath 或 -rpath-link)。
链接器错误:IC_NM_SenseMemory/output/linux_orin/lib/libsenseauto_sensememory.so 中存在对 `luaL_loadfilex` 等 Lua 函数的未定义引用。
原因分析:
链接器在尝试构建 SenseMemoryService 时,无法找到 libsenseauto_sensememory.so 库所依赖的 liblua.so.5 库(以及其他未找到的库)。更根本的原因是,尽管 libsenseauto_sensememory.so 依赖 Lua,但链接器在构建阶段没有正确找到或链接到 Lua 库。
解决方案:
- 确保 Lua 开发库已安装: 在你的目标系统(OrinX)上,安装 Lua 的开发包。通常可以通过包管理器完成,例如:
sudo apt-get update
sudo apt-get install liblua5.3-dev # 或 liblua5.1-dev, liblua5.2-dev, liblua5.4-dev,根据你的系统和项目需求选择版本
找到你的 CMake 项目的
CMakeLists.txt 文件(可能在 IC_NM_SenseMemory/build_linux_orin/shell/linux/SenseMemoryService 或父目录中),并添加对 Lua 库的查找和链接。例如,查找 Lua:
find_package(Lua REQUIRED)
然后,在链接你的目标时,将 Lua 库包含进去:
target_link_libraries(SenseMemoryService PRIVATE ${Lua_LIBRARIES})
如果
find_package(Lua) 不起作用,你可能需要手动指定 Lua 库的路径,这可以通过 CMAKE_LIBRARY_PATH 或直接在 target_link_libraries 中提供路径和库名。
示例 (手动链接):
假设 liblua.so.5 位于 /usr/lib/aarch64-linux-gnu/。
target_link_libraries(SenseMemoryService PRIVATE
-L/usr/lib/aarch64-linux-gnu/
-llua5.3 # 或实际的库名,如 -llua
# ... 其他库
)
注意: 你需要根据你系统中 Lua 库的实际位置和名称来调整
-L 和 -l 参数。
错误信息中提到了
-rpath。确保编译命令中包含正确的 -rpath 参数,指向 Lua 库所在的目录,以便运行时能够找到。CMake 的 find_package 通常会处理好这一点,或者你可以手动添加: target_link_options(SenseMemoryService PRIVATE "-Wl,-rpath,/usr/lib/aarch64-linux-gnu/") # 示例路径
请根据你的系统实际情况修改路径。
预防措施:
find_package 命令来查找和链接外部库,它能更好地处理不同系统和版本的问题。