首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将AzerothCore模块配置为与外部库链接?

如何将AzerothCore模块配置为与外部库链接?
EN

Stack Overflow用户
提问于 2022-10-18 17:22:49
回答 1查看 73关注 0票数 2

我正在开发一个模块,它依赖于另一个库(Wasmtime)。我把文件放进:

  • modules/mod_wasm/src/include -头文件,以及
  • modules/mod_mine/src/lib/libwasmtime.a -编译后的库。

我面临的问题是,当我用

代码语言:javascript
复制
./acore.sh compiler all

它给了我一个错误:

代码语言:javascript
复制
[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文件夹中

代码语言:javascript
复制
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,但是它需要一个目标名称,我不知道它应该是什么,也不知道我可以把它带到哪里。

EN

回答 1

Stack Overflow用户

发布于 2022-10-19 16:20:14

最后,我找到了一个答案,试图抓住。阿塞拜疆核心模块支持在配置包含所有额外模块的modname.cmake文件时运行libmodules.a文件(如果我正确理解的话)。这是modules/CMakeFiles.txt的一部分

代码语言:javascript
复制
# 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文件,它允许我编译服务器。

代码语言:javascript
复制
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)

所以,它现在编译了。但我还有下一个问题,我正在努力解决。但这是另一个故事。

谢谢大家的帮助

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74115034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档