首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebktiGtk未加载.so扩展

WebktiGtk未加载.so扩展
EN

Stack Overflow用户
提问于 2018-11-26 00:01:36
回答 1查看 273关注 0票数 0

由于某些原因,我似乎无法让WebkitGTK (2.22.4)加载.so网络扩展,我也不太清楚为什么会这样。下面的设置(稍微简化了一些) WebkitGtk本身工作正常,因为它加载页面,并触发初始化-web扩展信号,因此正在设置目录。

但是,尽管扩展名的.so文件位于工作目录(可执行文件也位于其中),但它似乎从未加载过。也许我错过了什么。

除了几个非常简单的例子之外,我也找不到关于具体实现的大量文档。(我已经看过了,但还没有进一步了解,因为示例代码完全相同)。

希望这里的人有个主意。

main.cpp

代码语言:javascript
复制
#include <gtk/gtk.h>
#include <webkit2/webkit2.h>


WebKitWebContext* context;

void initialize_web_extensions(WebKitWebContext* context, gpointer user_data) {
    g_print("[webkit2 web-extensions] initialize-web-extensions\n");
    webkit_web_context_set_web_extensions_directory(context, ".");
    return;
}

int main(int argc, char * argv[])
{
    exec_dir = dirname(realpath(argv[0], NULL));

    gtk_init(&argc, &argv);

    context = webkit_web_context_get_default();
    g_signal_connect(context, "initialize-web-extensions", G_CALLBACK(initialize_web_extensions), NULL);

    GtkWidget* window_widget;
    GtkWindow* window;
    window_widget = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    window = GTK_WINDOW(window_widget);

    WebKitWebView* webview = WEBKIT_WEB_VIEW(webkit_web_view_new());
    GtkWidget* webview_widget = GTK_WIDGET(webview);

    webkit_web_view_load_uri(webview, "https://google.com");
    gtk_container_add(GTK_CONTAINER(window_widget), webview_widget);

    gtk_widget_show_all(window_widget);

    gtk_main();

    return 0;
}

web_extension.cpp

代码语言:javascript
复制
static void
web_page_created_callback (WebKitWebExtension *extension,
                           WebKitWebPage      *web_page,
                           gpointer            user_data)
{
    g_print ("Page %d created for %s\n",
             webkit_web_page_get_id (web_page),
             webkit_web_page_get_uri (web_page));
}

G_MODULE_EXPORT void
webkit_web_extension_initialize (WebKitWebExtension *extension)
{
    g_signal_connect (extension, "page-created",
                      G_CALLBACK (web_page_created_callback),
                      NULL);
}

CMakeLists.txt

代码语言:javascript
复制
set(APP_SRCS main.cpp)
set(EXT_SRCS web_extension.cpp)

# Target executable names.
set(TARGET "app")
set(EXT_TARGET "extension")

# find gtk
PKG_CHECK_MODULES(GTK3 REQUIRED gtk+-3.0)
include_directories(${GTK3_INCLUDE_DIRS})
link_directories(${GTK3_LIBRARY_DIRS})
add_definitions(${GTK3_CFLAGS_OTHER})

# include webkitgtk
PKG_CHECK_MODULES(WEBKIT REQUIRED webkit2gtk-4.0 webkit2gtk-web-extension-4.0)
include_directories(${WEBKIT_INCLUDE_DIRS})
link_directories(${WEBKIT_LIBRARY_DIRS})
add_definitions(${WEBKIT_CFLAGS_OTHER})

# add extension
add_library(${EXT_TARGET} SHARED ${EXT_SRCS})
target_link_libraries(${EXT_TARGET} ${WEBKIT_LIBRARIES})

# Executable target.
add_executable(${TARGET} ${APP_SRCS})
SET_EXECUTABLE_TARGET_PROPERTIES(${TARGET})
target_link_libraries(${TARGET} ${EXT_TARGET})
target_link_libraries(${TARGET} ${GTK3_LIBRARIES})
target_link_libraries(${TARGET} ${WEBKIT_LIBRARIES})
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-29 20:15:34

显然,这与C++编译器中的符号损坏有关。不得不加上

代码语言:javascript
复制
external "C" {
    ...
}

显式禁用损坏,以便主应用程序可以找到公共符号。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53473237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档