Skip to content
This repository has been archived by the owner on Nov 3, 2023. It is now read-only.

插件加载失败,找不到符号 #145

Closed
1 task done
Adanelia opened this issue Nov 19, 2022 · 7 comments
Closed
1 task done

插件加载失败,找不到符号 #145

Adanelia opened this issue Nov 19, 2022 · 7 comments
Labels
s: finish but need test 状态:需要测试 t: bug 类型:bug

Comments

@Adanelia
Copy link

Code of Conduct

  • I conform

问题描述

描述

我在debian上使用gcc编译的插件加载时出错,mirai提示“找不到符号 插件入口”。
(libLoader也是gcc编译的。)
#119 的问题

failed to find symbol in plugin
应该是一样的。
看起来是只修复了MSVC没有适配gcc。

解决办法

我尝试了3种解决办法。

第一种

在插件的CMakeLists.txt里删除33行的-fvisibility=hidden
直接不隐藏符号。

第二种

在插件的single_include/MiraiCP/MiraiCP.hpp的四个函数添加可见属性。

extern "C" {
MIRAICP_EXPORT void FUNC_ENTRANCE(const LibLoader::LoaderApi::interface_funcs &);
MIRAICP_EXPORT void FUNC_EVENT(std::string content);
MIRAICP_EXPORT void FUNC_EXIT();
MIRAICP_EXPORT const MiraiCP::PluginConfig &PLUGIN_INFO();
}

改成

extern "C" {
MIRAICP_EXPORT __attribute__ ((visibility ("default"))) void FUNC_ENTRANCE(const LibLoader::LoaderApi::interface_funcs &);
MIRAICP_EXPORT __attribute__ ((visibility ("default"))) void FUNC_EVENT(std::string content);
MIRAICP_EXPORT __attribute__ ((visibility ("default"))) void FUNC_EXIT();
MIRAICP_EXPORT __attribute__ ((visibility ("default"))) const MiraiCP::PluginConfig &PLUGIN_INFO();
}

第三种

在single_include/MiraiCP/MiraiCP.hpp第150行(定义MIRAICP_EXPORT)下面添加如下:

#elif MIRAICP_GCC
#undef MIRAICP_EXPORT
#define MIRAICP_EXPORT __attribute__ ((visibility ("default")))

我觉得这个方法应该是最正确的,但是编译的时候会产生两个警告。

日志

No response

版本

2.13.0-alpha-2

组件

Plugin(SDK)

编译器

gcc/g++

系统

Linux/Unix

架构

arm64/aarch64

@Adanelia Adanelia added the t: bug 类型:bug label Nov 19, 2022
@Antares0982
Copy link
Collaborator

Antares0982 commented Nov 19, 2022 via email

@Antares0982 Antares0982 added p: low 优先级:低 s: needResponse 状态:需要进一步信息 s: unreproducible 状态:无法复现 labels Nov 19, 2022
@Antares0982
Copy link
Collaborator

Antares0982 commented Nov 19, 2022 via email

@Adanelia
Copy link
Author

Adanelia commented Nov 19, 2022

系统:
debian bullseye
gcc --version:
gcc (Debian 10.2.1-6) 10.2.1 20210110
cmake --version:
cmake version 3.18.4
MiraiCP版本:
9e8833b
MiraiCP-template版本:
ecda3d7

我这里只有arm的,没法测试x86_64会不会出现这个问题……

@Antares0982
Copy link
Collaborator

Antares0982 commented Nov 19, 2022 via email

@Adanelia
Copy link
Author

x86不会复现,之后会加入arm支持 Adanelia @.> 于 2022年11月19日周六 16:22写道:

系统: debian bullseye gcc --version: gcc (Debian 10.2.1-6) 10.2.1 20210110 cmake --version: cmake version 3.18.4 MiraiCP版本: 9e8833b <9e8833b> MiraiCP: ecda3d7 我这里只有arm的,没法测试x86_64会不会出现这个问题…… — Reply to this email directly, view it on GitHub <#145 (comment)>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AHYUJZWDQUX4VL45FQULB63WJCE3JANCNFSM6AAAAAASFFEV2U . You are receiving this because you commented.Message ID: @.
>

好,那我就关issue了

@Antares0982
Copy link
Collaborator

Antares0982 commented Nov 19, 2022 via email

@Adanelia
Copy link
Author

好的,不客气

@Antares0982 Antares0982 removed p: low 优先级:低 s: needResponse 状态:需要进一步信息 s: unreproducible 状态:无法复现 labels Nov 19, 2022
Antares0982 added a commit that referenced this issue Nov 19, 2022
@Antares0982 Antares0982 added the s: finish but need test 状态:需要测试 label Nov 19, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
s: finish but need test 状态:需要测试 t: bug 类型:bug
Projects
None yet
Development

No branches or pull requests

2 participants