- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试构建此处提供的 XPCOM 组件: http://mxr.mozilla.org/mozilla-central/source/xpcom/sample/
我试着用我自己的 Makefile 编译它,这样这个组件就可以与整个 Mozilla 源代码隔离。
这是我的文件树:
frinux@Bureau /cygdrive/c/dev/central_sample
$ ls -Rlah
.:
total 57K
d---------+ 1 frinux None 0 Jan 15 21:28 .
d---------+ 1 frinux None 0 Jan 15 20:34 ..
----------+ 1 frinux None 989 Jan 15 21:22 Makefile
----------+ 1 frinux None 2.4K Jan 15 21:05 nsISample.idl
----------+ 1 frinux None 6.0K Jan 15 21:05 nsSample.cpp
----------+ 1 frinux None 5.1K Jan 15 21:06 nsSample.h
----------+ 1 frinux None 2.0K Jan 15 21:06 nsSample.js
----------+ 1 frinux None 131 Jan 15 21:06 nsSample.manifest
----------+ 1 frinux None 4.7K Jan 15 21:06 nsSampleModule.cpp
d---------+ 1 frinux None 0 Jan 15 21:28 program
----------+ 1 frinux None 8.7K Jan 15 21:06 xpconnect-sample.html
./program:
total 16K
d---------+ 1 frinux None 0 Jan 15 21:28 .
d---------+ 1 frinux None 0 Jan 15 21:28 ..
----------+ 1 frinux None 2.7K Jan 15 21:07 Makefile.in
----------+ 1 frinux None 4.5K Jan 15 21:07 nsTestSample.cpp
这是我制作的 makefile :
CXX = c++
CPPFLAGS += -fno-rtti \
-fno-exceptions \
-shared
# Change this to point at your Gecko SDK directory.
GECKO_SDK_PATH = /cygdrive/c/dev/greenchallenge/xulrunner-sdk-9.0.1
# 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 mozilla-config.h
GECKO_DEFINES = -DXPCOM_GLUE -DXP_WIN
GECKO_INCLUDES = -I $(GECKO_SDK_PATH)/include
GECKO_LDFLAGS = -L $(GECKO_SDK_PATH)/lib -lxpcomglue \
-lnspr4 \
-lplds4
FILES = nsSample.cpp nsSampleModule.cpp
TARGET = sample.dll
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)
我正在尝试在 Windows 下使用 cygwin 构建它(安装了 gcc 和 g++)。
编译时,我遇到了这些错误,经过几个小时的研究,我仍然不理解它们:
$ make
c++ -Wall -Os -o greenfox.dll -include mozilla-config.h -DXPCOM_GLUE -DXP_WIN -I /cygdrive/c/dev/greenchallenge/xulrunner-sdk-9.0.1/include -L /cygdrive/c/dev/greenchallenge/xulrunner-sdk-9.0.1/lib -lxpcomglue -lnspr4 -lplds4 -fno-rtti -fno-exceptions -shared nsSample.cpp nsSampleModule.cpp
In file included from nsSample.cpp:48:
nsSample.h:44:23: nsISample.h: No such file or directory
In file included from nsSample.cpp:48:
nsSample.h:64: error: expected class-name before '{' token
nsSample.h:76: error: `NS_DECL_ISUPPORTS' does not name a type
In file included from /cygdrive/c/dev/greenchallenge/xulrunner-sdk-9.0.1/include/nsAlgorithm.h:43,
from /cygdrive/c/dev/greenchallenge/xulrunner-sdk-9.0.1/include/nsTArray.h:45,
from /cygdrive/c/dev/greenchallenge/xulrunner-sdk-9.0.1/include/nsStringAPI.h:56,
from /cygdrive/c/dev/greenchallenge/xulrunner-sdk-9.0.1/include/nsEmbedString.h:43,
from nsSample.cpp:51:
/cygdrive/c/dev/greenchallenge/xulrunner-sdk-9.0.1/include/nsCharTraits.h:143: error: an explicit specialization must be preceded by 'template <>'
/cygdrive/c/dev/greenchallenge/xulrunner-sdk-9.0.1/include/nsCharTraits.h:433: error: an explicit specialization must be preceded by 'template <>'
/cygdrive/c/dev/greenchallenge/xulrunner-sdk-9.0.1/include/nsCharTraits.h:727: error: an explicit specialization must be preceded by 'template <>'
/cygdrive/c/dev/greenchallenge/xulrunner-sdk-9.0.1/include/nsCharTraits.h:763: error: an explicit specialization must be preceded by 'template <>'
/cygdrive/c/dev/greenchallenge/xulrunner-sdk-9.0.1/include/nsCharTraits.h:828: error: an explicit specialization must be preceded by 'template <>'
/cygdrive/c/dev/greenchallenge/xulrunner-sdk-9.0.1/include/nsCharTraits.h:840: error: an explicit specialization must be preceded by 'template <>'
nsSample.cpp:61: error: no `nsSampleImpl::~nsSampleImpl()' member function declared in class `nsSampleImpl'
nsSample.cpp:81: error: no `nsrefcnt nsSampleImpl::AddRef()' member function declared in class `nsSampleImpl'
nsSample.cpp: In member function `nsrefcnt nsSampleImpl::AddRef()':
nsSample.cpp:81: error: `mRefCnt' undeclared (first use this function)
nsSample.cpp:81: error: (Each undeclared identifier is reported only once for each function it appears in.)
nsSample.cpp: At global scope:
nsSample.cpp:81: error: no `nsrefcnt nsSampleImpl::Release()' member function declared in class `nsSampleImpl'
nsSample.cpp: In member function `nsrefcnt nsSampleImpl::Release()':
nsSample.cpp:81: error: `mRefCnt' undeclared (first use this function)
nsSample.cpp: At global scope:
nsSample.cpp:81: error: no `nsresult nsSampleImpl::QueryInterface(const nsIID&, void**)' member function declared in class `nsSampleImpl'
nsSample.cpp: In member function `nsresult nsSampleImpl::QueryInterface(const nsIID&, void**)':
nsSample.cpp:81: error: `::nsISample' has not been declared
nsSample.cpp:81: error: `COMTypeInfo' undeclared (first use this function)
nsSample.cpp:81: error: expected primary-expression before "int"
nsSample.cpp:81: error: expected `)' before "int"
nsSample.cpp:81: error: expected `)' before ';' token
nsSample.cpp:81: error: `nsISample' has not been declared
nsSample.cpp:81: error: expected `>' before '*' token
nsSample.cpp:81: error: expected `(' before '*' token
nsSample.cpp:81: error: expected primary-expression before '>' token
nsSample.cpp:81: error: expected `)' before ';' token
nsSample.cpp: In function `nsresult nsSampleImpl_GetInterfacesHelper(PRUint32*, nsIID***)':
nsSample.cpp:81: error: `::nsISample' has not been declared
nsSample.cpp:81: error: `COMTypeInfo' undeclared (first use this function)
nsSample.cpp:81: error: expected primary-expression before '*' token
nsSample.cpp:81: error: expected primary-expression before ')' token
nsSample.cpp:81: error: expected `;'
nsSample.cpp: At global scope:
nsSample.cpp:89: error: no `nsresult nsSampleImpl::GetValue(char**)' member function declared in class `nsSampleImpl'
nsSample.cpp:120: error: no `nsresult nsSampleImpl::SetValue(const char*)' member function declared in class `nsSampleImpl'
nsSample.cpp:141: error: no `nsresult nsSampleImpl::Poke(const char*)' member function declared in class `nsSampleImpl'
nsSample.cpp: In member function `nsresult nsSampleImpl::Poke(const char*)':
nsSample.cpp:142: error: `SetValue' undeclared (first use this function)
nsSample.cpp: At global scope:
nsSample.cpp:153: error: no `nsresult nsSampleImpl::WriteValue(const char*)' member function declared in class `nsSampleImpl'
In file included from /cygdrive/c/dev/greenchallenge/xulrunner-sdk-9.0.1/include/mozilla/Module.h:44,
from /cygdrive/c/dev/greenchallenge/xulrunner-sdk-9.0.1/include/mozilla/ModuleUtils.h:42,
from nsSampleModule.cpp:39:
/cygdrive/c/dev/greenchallenge/xulrunner-sdk-9.0.1/include/nsCOMPtr.h:895: error: an explicit specialization must be preceded by 'template <>'
/cygdrive/c/dev/greenchallenge/xulrunner-sdk-9.0.1/include/nsCOMPtr.h:1366: error: an explicit specialization must be preceded by 'template <>'
In file included from nsSampleModule.cpp:42:
nsSample.h:44:23: nsISample.h: No such file or directory
In file included from nsSampleModule.cpp:42:
nsSample.h:64: error: expected class-name before '{' token
nsSample.h:125: error: ISO C++ forbids declaration of `NS_DECL_NSISAMPLE' with no type
nsSample.h:125: error: expected `;' before "private"
Makefile:27: recipe for target `build' failed
make: *** [build] Error 1
好像 Mozilla 代码中有错误...我做错了什么?
谢谢!
最佳答案
重要的错误似乎是这个,其余的看起来像后续错误:
nsSample.h:44:23: nsISample.h: No such file or directory
该文件需要在构建时使用 xpidl
command line tool 从 nsISample.idl
创建:
xpidl -m header nsISample.idl
显然,在较新的 XULRunner SDK 版本中,您将使用 pyxpidl相反:
header.py -o nsISample.h nsISample.idl
关于c++ - 构建 XPCOM Mozilla 示例组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8873148/
有没有人能够构建静态链接的 NSS?我实际上只需要构建静态链接的 certutil 和 pk12util。我已经看到 Chromium 正在静态构建 NSS,他们甚至有一个补丁文件,但整个构建过程非常
我正在尝试使用下面的 css 和 html 代码在弹出窗口的底部应用空间,因为我只有 mozilla 浏览器有问题,我在弹出窗口的末尾没有获得空间。下面是我的代码我已经使用过,但我需要减少 chrom
我使用下面的行,这样当我单击“新建”按钮时,它将清空所有字段。使用 onClick="history.go(0)"在 IE 中有效,但在 Mozilla 中失败。 最佳答案 要清空所有字段,请使
我尝试在一个简单的 A-Frame WebVR 应用程序上禁用检查器,但没有成功。 尝试使用 JavaScript 来使用并禁用按键 Ctrl + Alt + I。但是,Inspector 仍在加载。
我正在做一个项目,现在正在测试中。需要使网站与所有现代兼容,并至少使它们与每个主要浏览器的 2 个旧版本兼容。 为此,我在 IE 中使用了 IE F12 工具,以切换到 IE 9、8、7 View 。
我在项目中将gulp与autoprefixer一起使用,并且必须像这样使用背景渐变: background: linear-gradient(#e98a00, #f5aa2f); 但输出是: back
如果我想限制电子邮件地址访问网站,使用 Persona 有哪些优势?我必须以相同的方式管理我服务器上的授权电子邮件地址吗?缺少什么? 最佳答案 在您的网站上使用 Persona 的两个主要优点是: 您
Thunderbird的过滤机制非常适合简单的事情。 但我想做类似的事情 (如果邮件包含xy或发件人为yz)并且状态已读取,请移至回收站 问题是,一个过滤器规则只能匹配任何(= OR)或所有(= AN
有一个奇怪的 webVR Mozilla A-Frame 问题 所以我在 a-curvedimage 标签中加载图像(里面有一些动画内容),如下所示: 我正在检查 chrome 中的网络
我觉得其中缺少了一些东西。这是: 嵌套函数和闭包 您可以在函数中嵌套函数。嵌套(内部)函数对其包含(外部)函数是私有(private)的。它还形成了一个封闭。闭包是一个表达式(通常是一个函数),它可以
JS BIN Attempt 尝试按照示例进行操作,但似乎不起作用。有点困惑,因为它是 Mozilla。 Mozilla 最佳答案 正如 @Xaerxess 提到的,当 DOM 准备好进行操作时,您需
我需要制作一个可以在每个页面和浏览器上运行的按钮,可以从文本区域复制输入。我正在尝试使用以下函数来做到这一点: selectElementContents: function(){ el
我需要一个粘性栏在一定的滚动后可见并固定。我打算使用滚动事件,然后我遇到了 Mozilla 页面,该页面建议使用 window.requestAnimationFrame 如下: var last_k
我希望我的元素具有多种颜色的清晰背景渐变。在 Chrome 上运行良好,但在 Firefox 上过渡时边缘模糊。 这里有一些例子: 火狐: Chrome : 如何让它在 Firefox 上运行? .f
为什么这是Webkit用户代理: Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/534.27+ (KHTML, like Gecko) Version
我正在尝试使用 JavaScript 创建一个游戏,但在此过程中我发现了 Firefox 中的一个错误。游戏很简单。您应该猜测 RGB 十六进制代码中的颜色是什么。有6个框,您应该单击该框,如果错误或
我在 Mozilla 和 Chrome 中都有一个扩展,在我的扩展中我调用了一个远程 JS 文件。 为了避免 Chrome 中的 CSP,我将规则添加到 manifest.json 并且我的文件通过
我找到了一种将我的 Chrome 扩展程序转换为模块的便捷方法(更易于维护等)。我是这样做的https://stackoverflow.com/a/53033388/9182284 (把backgro
我有以下代码来设置选择框的样式,它在 chrome 中完美运行,但在 mozilla fire fox 27.0 中运行不正常 .select-box { line-height: inhe
我没有询问变换原点。我问为什么动画在 mozilla 上不起作用 我一直在 Mozilla 上做一些动画 svg。我在 Chrome 中尝试过的动画效果非常好,但是当我在 mozilla 上测试时效果
我是一名优秀的程序员,十分优秀!