Я пытаюсь собрать простой компонент XPCOM для Firefox 3.6.13 в операционной системе LINUX.Я успешно скомпилировал компонент, используя Xulrunner SDK 1.9.2.13.Я держал его в каталоге компонентов.Но когда я запускаю Firefox, консоль Firefox показывает ошибку
'Не удалось загрузить компонент XPCOM: /home/mypc/.mozilla/firefox/cxsm79p6.default/extensions/ average1280606b-2510-4fe0-97ef-9b5a22eafe80} /components/MyComponent.so
Обращаясь по этой ссылке https://developer.mozilla.org/en/Troubleshooting_XPCOM_components_registration,, я следовал инструкциям под заголовком «Подсказки для Linux».В нем говорится, что при соединении используется специальная опция времени соединения -Wl,-z,defs
.Поэтому я добавил эти параметры, но теперь при компиляции отображаемой ошибки:
make: Warning: File `Makefile' has modification time 0.25 s in the future
c ++ -Os -Wall -o MyComponent.so -include xpcom-config.h -DXPCOM_GLUE_USE_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-exception -shared -Wl, -z, defs MyComponent.cpp MyComponentModule.cpp /tmp/ccMGUTql.o: в функции MyComponent::QueryInterface(nsID
const&, void**)':
MyComponent.cpp:(.text+0x9b):
undefined reference to
NS_TableDrivenQI (void *, QITableEntry const *, nsID const &, void ** ')/tmp/ccbkZLTz.o: В функции NSGetModule':
MyComponentModule.cpp:(.text+0x15):
undefined reference to
NS_NewGenericModule2 (nsModuleInfo const *, nsIModule *) 'collect2: ld вернул 1 состояние выхода make: ** [build] Ошибка 1
Мой новый make-файл выглядит следующим образом
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)
Может кто-нибудь помочь мне обойти это?