我正在开发一个模块,它依赖于另一个库(Wasmtime)。我把文件放进:
modules/mod_wasm/src/include -头文件,以及modules/mod_mine/src/lib/libwasmtime.a -编译后的库。我面临的问题是,当我用
./acore.sh compiler all它给了我一个错误:
[100%] Linking CXX executable worldserver
/usr/bin/ld: ../../../modules/libmodules.a(ModWasm.cpp.o): in function `readWasmFile(char const*)':
ModWasm.cpp:(.text+0x63): undefined reference to `wasm_byte_vec_new_uninitialized'
/usr/bin/ld: ModWasm.cpp:(.text+0xce): undefined reference to `wasm_byte_vec_delete'问题是它是否需要添加到某个配置库中?如果是,那怎么做?
我在简单的main.cpp文件中测试我的代码,它使用的是"-L${workspaceFolder}/lib"和"-lwasmtime"等选项。也许,我的模块也需要这些选项?
下面是我使用的一个连接到阿奇乐核心项目。我的模块位于modules/mod-wasm文件夹中
azerothcore-wotlk/modules ‹master*› » tree -L 3 mod-wasm
mod-wasm
├── CMakeLists.txt
├── LICENSE
├── Makefile
├── README.md
├── conf
│ ├── conf.sh.dist
│ └── wasm.conf.dist
├── include.sh
├── mod-wasm.cmake
├── setup_git_commit_template.sh
├── src
│ ├── ModWasm.cpp
│ ├── include
│ │ ├── doc-wasm.h
│ │ ├── wasi.h
│ │ ├── wasm.h
│ │ ├── wasmtime
│ │ ├── wasmtime.h
│ │ └── wasmtime.hh
│ ├── lib
│ │ ├── libwasmtime.a
│ │ └── libwasmtime.so
│ └── wasm_loader.cpp
└── wasm_modules
└── rust_wasm_app.wasm正如我从日志中了解到的,以及由于CMakeList.txt存在于modules文件夹中,项目将该文件夹视为模块。依次扫描子目录中的*.cmake文件并配置项目。
现在的问题是如何正确配置我的模块,以显示它在src/lib文件夹中包含已编译的库wasmtime?正如我所理解的,我可以使用target_link_libraries,但是它需要一个目标名称,我不知道它应该是什么,也不知道我可以把它带到哪里。
发布于 2022-10-19 16:20:14
最后,我找到了一个答案,试图抓住。阿塞拜疆核心模块支持在配置包含所有额外模块的modname.cmake文件时运行libmodules.a文件(如果我正确理解的话)。这是modules/CMakeFiles.txt的一部分
# Enables Devs to Include a cmake file in their module that will get run inline with the config.
foreach(SOURCE_MODULE ${MODULES_MODULE_LIST})
message("SOURCE_MODULE: ${SOURCE_MODULE}")
include("${CMAKE_SOURCE_DIR}/modules/${SOURCE_MODULE}/${SOURCE_MODULE}.cmake" OPTIONAL)
endforeach()这里我有一个脏的cmake文件,它允许我编译服务器。
set(WASM_MODULE_DIR ${CMAKE_SOURCE_DIR}/modules/${SOURCE_MODULE})
set(WASM_MODULE_SRC_DIR ${WASM_MODULE_DIR}/src)
message("--------------------->>>>> APPLICATION_NAME : ${APPLICATION_NAME}")
message("--------------------->>>>> APP_PROJECT_NAME : ${APP_PROJECT_NAME}")
message("--------------------->>>>> SOURCE_MODULE : ${SOURCE_MODULE}")
message("--------------------->>>>> WASM_MODULE_DIR : ${WASM_MODULE_DIR}")
message("--------------------->>>>> WASM_MODULE_SRC_DIR : ${WASM_MODULE_SRC_DIR}")
# include wasmtime
target_include_directories(modules PUBLIC ${WASM_MODULE_SRC_DIR}/include)
target_link_directories(modules PUBLIC ${WASM_MODULE_SRC_DIR}/lib)
find_library(LIBWASMTIME_TO_INCLUDE NAMES wasmtime PATHS ${WASM_MODULE_SRC_DIR}/lib REQUIRED)
message("--------------------->>>>>>>>> LIBWASMTIME_TO_INCLUDE: ${LIBWASMTIME_TO_INCLUDE}")
target_link_libraries(modules PUBLIC wasmtime)所以,它现在编译了。但我还有下一个问题,我正在努力解决。但这是另一个故事。
谢谢大家的帮助
https://stackoverflow.com/questions/74115034
复制相似问题