gpt4 book ai didi

c++ - 注册 XPCOM 组件时出现问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:01:36 27 4
gpt4 key购买 nike

我正在开发我的第一个 XPCOM 组件。很遗憾,我无法注册成功。

建筑没问题。这是生成文件

CXX   = g++
CPPFLAGS += -fno-rtti \
-fexceptions \
-shared \
-fshort-wchar

# Change this to point at your Gecko SDK directory.
GECKO_SDK_PATH = /path/to/gecko/sdk

# GCC only define which allows us to not have to #include mozilla-config
# in every .cpp file. If your not using GCC remove this line and add
# #include "mozilla-config.h" to each of your .cpp files.
GECKO_CONFIG_INCLUDE = -include ${GECKO_SDK_PATH}/include/xpcom/xpcom-config.h

GECKO_DEFINES = -DXPCOM_GLUE -DXPCOM_GLUE_USE_NSPR

GECKO_INCLUDES = -I ${GECKO_SDK_PATH}/sdk/include \
-I ${GECKO_SDK_PATH}/include/necko \
-I ${GECKO_SDK_PATH}/include/nss \
-I ${GECKO_SDK_PATH}/include/nspr

GECKO_LDFLAGS = -L${GECKO_SDK_PATH}/lib -L${GECKO_SDK_PATH}/bin -Wl,-rpath-link,${GECKO_SDK_PATH}/bin -lxpcomglue_s -lxpcom -lnspr4

FILES = Component.cpp ComponentModule.cpp

TARGET = Component.so

build:
$(CXX) -Wall -Os -o $(TARGET) $(GECKO_CONFIG_INCLUDE) $(GECKO_DEFINES) $(GECKO_INCLUDES) $(GECKO_LDFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(FILES)
chmod +x $(TARGET)
strip $(TARGET)

clean:
rm $(TARGET)

我在我的开发 firefox 配置文件的扩展目录下创建了一个新的扩展文件夹。 IComponent.xpt 和 Component.so 文件放在组件目录下。

然后我从我的开发 firefox 配置文件中删除了 compreg.dat 和 xpti.dat。我重新启动它,它应该会自动注册组件。但是 XPCOM 查看器没有显示我的组件。

我运行这个命令来检查错误

./run-mozilla.sh `which ldd` -r /path/to/component/Component.so

它显示了几个 undefined symbol

...
undefined symbol: _ZNK9nsAString12BeginReadingEv (/path/to/component/Component.so)
undefined symbol: _ZNK10nsACString12BeginReadingEv (/path/to/component/Component.so)
undefined symbol: _ZN9nsAString17DefaultComparatorEPKtS1_j (/path/to/component/Component.so)
undefined symbol: _ZNK9nsAString6EqualsEPKtPFiS1_S1_jE (/path/to/component/Component.so)
undefined symbol: _ZN9nsAString13AssignLiteralEPKc (/path/to/component/Component.so)
undefined symbol: _ZN13nsCOMPtr_base16begin_assignmentEv (/path/to/component/Component.so)
undefined symbol: _ZN13nsCOMPtr_baseD2Ev (/path/to/component/Component.so)
undefined symbol: _Z16NS_TableDrivenQIPvPK12QITableEntryRK4nsIDPS_ (/path/to/component/Component.so)
undefined symbol: _Z20NS_NewGenericModule2PK12nsModuleInfoPP9nsIModule (/path/to/component/Component.so)

我一直在我的代码中使用 nsAString 和 COMPtr。

我的步骤有问题吗?谁能解释为什么有 undefined symbol ? undefined symbol 是什么意思?如何让他们得到认可?

最佳答案

你显然已经看到了这个,但作为引用:https://developer.mozilla.org/en/Troubleshooting_XPCOM_components_registration

至于你的问题,我不是专家,但你似乎没有使用XPCOM Glue适本地。文档说您在构建组件时不需要定义 XPCOM_GLUE。 (如果这没有帮助,您应该发布到 mozilla 论坛(例如 mozilla.dev.extensions 或 xpcom),真正的专家可能会在那里看到您的问题,因为您可以看到很少有人精通构建/注册机器。)

顺便说一下,+1 关于使用 JS 组件!

关于c++ - 注册 XPCOM 组件时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/599219/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com