Linux Firefox未在Fedora下加载XPCOM组件

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.

我正在尝试在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特定提示”下的说明。它表示在链接时使用特殊的链接时间选项
-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)