c++ - 与 .so 文件链接 (webkit)

标签 c++ unix webkit g++ linker

我正在尝试创建一个使用 WebKit/GTK+ 中的部分代码的程序。具体来说,我想加载一个字符串,使用 WebKit 的解析器构造一个 DOM 树,然后遍历该树。

我正在尝试使用一个名为 HTMLDocument 的类。 WebKit/GTK+ 没有将此作为其 API 的一部分公开,我在链接时遇到了一些问题。

我能够正常构建 WebKit/GTK+,这给了我一个名为:libwebkit-1.0.so 的文件。我的程序是:

#include <iostream>
#include <WebCore/config.h>
#include <WebCore/html/HTMLDocument.h>

using namespace WebCore;

int main() {
    String title = "test";

    RefPtr<HTMLDocument> d = HTMLDocument::create(0);
    d->open();
    d->write("<!doctype html><html><head><title>" + title + "</title></head><body></body></html>");
}

这可以很好地编译(我正在使用 webkit 用于构建的相同 include 指令),但会导致链接错误。

...test_doc.cpp:18: undefined reference to `WebCore::String::String(char const*)'
...test_doc.cpp:21: undefined reference to WebCore::Document::open(WebCore::Document*)'
...(similar for every function I use)

如果我运行:

nm -C .libs/libwebkit-1.0.so | grep 'WebCore::Document::open'

我明白了:

003b1830 T WebCore::Document::open(WebCore::Document*)

这似乎表明该功能可用。我有相当多的 C++ 经验,但在 Linux 下链接文件的经验不多。

我并不期望这个确切的问题能得到解决,但如果我有概念上的问题,我希望有人能纠正我。我的主要问题是,当我链接一个列出该函数已定义的 .so 文件时,为什么会看到“ undefined reference ”错误。是否需要另一个文件或构建步骤?

非常感谢。

使用: Ubuntu 9.10 g++ 4.4.1

g++ 被调用:

g++ --debug -DHAVE_CONFIG_H -I.   `pkg-config --cflags libsoup-2.4` \
-DBUILDING_CAIRO__=1 -DBUILDING_GTK__=1 -DWTF_CHANGES -DWTF_USE_ICU_UNICODE=1 \
-DNDEBUG   -I./WebCore -I./WebCore/accessibility -I./WebCore/bindings/js \ 
-I./WebCore/bridge -I./WebCore/bridge/c -I./WebCore/css -I./WebCore/dom \
...many more webkit include directories...
 -DDATA_DIR=\"/usr/local/share\" \
 test_doc.cpp -o test_doc.out \
./webkit-1.1.15.3/.libs/libwebkit-1.0.so

(我用 -L/path/to/lib -lwebkit-1.0 得到相同的结果)

最佳答案

我认为您可能遇到了排序问题:man g++ 指定 -l 选项的顺序很重要,链接器将仅从内存中查找前面的对象中的符号命令行上的当前文件。

我怀疑正在发生的事情是链接器在看到 libwebkit-1.0.so 之前尝试链接 test_doc,所以它还没有看到任何这些符号和保释。

关于c++ - 与 .so 文件链接 (webkit),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1811297/

相关文章:

Bash - 从字符串中提取数字

c++ - 通过删除点链接和重复的斜线规范化 Unix 文件路径

html - iframe 中的 SVG 存在奇怪的不一致问题

css - 将鼠标悬停在其上时如何更改-webkit-scrollbar宽度

python - 如何让webkit为表单生成报表?

c++ - 将返回的指针分配给另一个返回的指针?

c++ - 在 VS14 中排序不能正常工作,而在 VS10 中可以吗?

bash - 在 osx 上使用 xld 在命令行中分割提示音频文件

c++ - 如何使用 thrust::lower_bound() 克服 VBO 索引计算期间的内存限制

c++ - 从类型 'delai_assemblage*&' 的表达式对类型 'delai_assemblage' 的引用的初始化无效