Linux Firefox未在Fedora下加载XPCOM组件
我正在尝试在LINUX操作系统下为Firefox 3.6.13构建简单的XPCOM组件。我使用Xulrunner SDK 1.9.2.13成功编译了该组件。我把它放在组件目录下。但当我启动firefox时,firefox控制台显示错误 '未能加载XPCOM组件: /home/mypc/.mozilla/firefox/cxsm79p6.default/extensions/{1280606b-2510-4fe0-97ef-9b5a22eafe80}/components/MyComponent.so 通过引用此链接,我遵循了标题为“Linux特定提示”下的说明。它表示在链接时使用特殊的链接时间选项Linux Firefox未在Fedora下加载XPCOM组件,linux,gcc,firefox-addon,xpcom,Linux,Gcc,Firefox Addon,Xpcom,我正在尝试在LINUX操作系统下为Firefox 3.6.13构建简单的XPCOM组件。我使用Xulrunner SDK 1.9.2.13成功编译了该组件。我把它放在组件目录下。但当我启动firefox时,firefox控制台显示错误 '未能加载XPCOM组件: /home/mypc/.mozilla/firefox/cxsm79p6.default/extensions/{1280606b-2510-4fe0-97ef-9b5a22eafe80}/components/MyComponent.
-Wl,-z,defs
。因此,我添加了这些选项,但现在在编译时显示错误为
c++-Os-Wall-o MyComponent.so
-包括xpcom config.h-DXPCOM\u GLUE\u USE\u NSPR-I/mnt/hgfs/C/Users/sunil/SDKS/LINUX/xulrunner sdk/include
-I./-L/mnt/hgfs/C/Users/sunil/SDKS/LINUX/xulrunner-sdk/lib
-lxpcomglue_s-lxpcom-lnspr4-fno rtti-fno异常-共享-Wl,-z,defs MyComponent.cpp MyComponentModule.cpp
/tmp/ccMGUTql.o:In函数
MyComponent::QueryInterface(nsID)
常量和,void**'):
MyComponent.cpp:(.text+0x9b):
未定义的引用
NS_tabledrivennqi(void*,QITableEntry)
常量*,nsID常量和,无效**)
/tmp/ccbkZLTz.o:功能正常
NSGetModule':
MyComponentModule.cpp:(.text+0x15):
未定义的引用
NS\u新通用模块2(nsModuleInfo
常量*,nsimule*)“集合2:ld
返回1个退出状态:**
[生成]错误1
我的新makefile如下
CXX = c++
CPPFLAGS += -fno-rtti \
-fno-exceptions \
-shared \
-Wl,-z,defs
# Change this to point at your Gecko SDK directory.
GECKO_SDK_PATH =/mnt/hgfs/C/Users/sunil/SDKS/LINUX/xulrunner-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 xpcom-config.h
GECKO_DEFINES = -DXPCOM_GLUE_USE_NSPR
GECKO_INCLUDES = -I $(GECKO_SDK_PATH)/include
GECKO_LDFLAGS = -L $(GECKO_SDK_PATH)/lib -lxpcomglue_s -lxpcom \
-lnspr4
FILES = MyComponent.cpp MyComponentModule.cpp
TARGET = MyComponent.so
build:
$(CXX) -Os -Wall -o $(TARGET) $(GECKO_CONFIG_INCLUDE) $(GECKO_DEFINES) $(GECKO_INCLUDES) -I./ $(GECKO_LDFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(FILES)
chmod +x $(TARGET)
strip $(TARGET)
clean:
rm $(TARGET)
有人能帮我解决这个问题吗?如果没有指定库,我想您会遇到这个错误。其中一行可能会修复它:
GECKO_LDFLAGS = -L$(GECKO_SDK_PATH)/lib -L$(GECKO_SDK_PATH)/bin -Wl,-rpath-link,$(GECKO_SDK_PATH)/bin -lxpcomglue_s -lxpcom -lnspr4
或
GECKO_LDFLAGS = -L$(GECKO_SDK_PATH)/lib -L$(GECKO_SDK_PATH)/bin -Wl,-rpath-link,$(GECKO_SDK_PATH)/bin -lxpcomglue_s -lxpcom -lnspr4
$(CXX) -Os -Wall -o $(TARGET) $(GECKO_CONFIG_INCLUDE) $(GECKO_DEFINES) $(GECKO_INCLUDES) -I./ $(CPPFLAGS) $(CXXFLAGS) $(FILES) $(GECKO_LDFLAGS)