Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有自己的库的插件杀死浏览器 我是C++新手,插件开发。我正在使用/为Unix和Firefox浏览器工作。现在我们开始: 我有一个插件,它使用自己库中的一些类。问题是:它会尽快杀死我的浏览器。我甚至不能在我的plugin.so位于Firefox的plugin文件夹中时立即启动浏览器。该库是构建的,不会杀死使用它的桌面应用程序。 我的猜测是,我未能将我的库与CMake链接,或者忘记包含FireBreath中的一些内容。所以这里有两件事我认为是错误的,也许有人可以帮我_Cmake_Firebreath - Fatal编程技术网

具有自己的库的插件杀死浏览器 我是C++新手,插件开发。我正在使用/为Unix和Firefox浏览器工作。现在我们开始: 我有一个插件,它使用自己库中的一些类。问题是:它会尽快杀死我的浏览器。我甚至不能在我的plugin.so位于Firefox的plugin文件夹中时立即启动浏览器。该库是构建的,不会杀死使用它的桌面应用程序。 我的猜测是,我未能将我的库与CMake链接,或者忘记包含FireBreath中的一些内容。所以这里有两件事我认为是错误的,也许有人可以帮我

具有自己的库的插件杀死浏览器 我是C++新手,插件开发。我正在使用/为Unix和Firefox浏览器工作。现在我们开始: 我有一个插件,它使用自己库中的一些类。问题是:它会尽快杀死我的浏览器。我甚至不能在我的plugin.so位于Firefox的plugin文件夹中时立即启动浏览器。该库是构建的,不会杀死使用它的桌面应用程序。 我的猜测是,我未能将我的库与CMake链接,或者忘记包含FireBreath中的一些内容。所以这里有两件事我认为是错误的,也许有人可以帮我,cmake,firebreath,Cmake,Firebreath,1) (错误?)与Cmake链接: 我在项目的CMakeLists.txt末尾添加了其中一些。路径是库所在的位置 add_definitions(-L${CMAKE_CURRENT_SOURCE_DIR}/../../../lib/bin) add_definitions(-I${CMAKE_CURRENT_SOURCE_DIR}/../../../lib/src) add_definitions(-lcoala64) [name of the library]

1) (错误?)与Cmake链接: 我在项目的CMakeLists.txt末尾添加了其中一些。路径是库所在的位置

    add_definitions(-L${CMAKE_CURRENT_SOURCE_DIR}/../../../lib/bin)
    add_definitions(-I${CMAKE_CURRENT_SOURCE_DIR}/../../../lib/src)
    add_definitions(-lcoala64) [name of the library]
    add_definitions(-Wl,-rpath=${CMAKE_CURRENT_SOURCE_DIR}/../../../lib/bin)
    add_definitions(-pthread -I/usr/include/gtk-2.0 -I/usr/lib/x86_64-linux-gnu/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/harfbuzz  -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lglib-2.0)
并使用prepmake.sh生成我的构建文件。然后,我在/buid/projects/MyPlugin/CMakeFiles/MyPlugin.dir/link.txt中手动添加标志(因为我不知道更好的解决方案)

    -L/home/username/swp/dev/lib/bin
    -I/home/username/swp/dev/lib/src
    -lcoala64 -Wl,-rpath=/home/username/swp/dev/lib/bin
之后,我可以构建插件。它会构建,因此可以假设我链接正确。但我说只要我想用它就会出现崩溃

2) 我用错图书馆了吗? 我在MyPluginAPI.h中包括如下内容:

    #include <string>
    #include <sstream>
    #include <boost/weak_ptr.hpp>
    #include <boost/smart_ptr.hpp>
    #include "JSAPIAuto.h"
    #include "BrowserHost.h"
    #include "X11/X11KryptoKoala.h"
    //Include from my own library:
    #include "../../../lib/src/Key.hpp"

现在我希望这不是一个太大的文本墙,有人愿意调查并回答我。

你不应该这样使用add_definitions()。CMake允许在不同的类别中区分指令,以便它们只进入必要的命令行。你应使用:

 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
 include_directories(/usr/include/gtk-2.0  
                     /usr/include/cairo
                     etc. etc.
                    )
 add_library(the_name_of_your_target gtk-x11-2.0 gdk-x11-2.0 ETC. ETC.)
 link_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../../lib/bin)
此外,FindPackage功能可以帮助您自动设置包含库名称、目录及其包含路径的变量

大多数信息都可以找到并保存

那么:什么是prepmake.sh?你在运行cmake吗?您可以使用CMAKEGUI,然后选择一个规范的构建系统,比如make或ninja吗


最后:可能是因为库不在库路径中而导致崩溃。我假设您是在linux下,这里有一些想法:为了澄清,prepmake.sh只是一个助手,它调用cmake进行源代码外构建;我们用它来帮助那些不熟悉cmake的人,让他们不那么快地射中自己的脚;在我自己完全熟悉cmake之前,我就开始这么做了,我很想改变很多事情,但就是没有时间嘿,谢谢你的想法。可悲的是,这根本没用。我按照你的建议做了,并通过ldd检查了我的插件是否将我的库链接到了正确的路径。我猜FireFox的PluginContainer不喜欢它。
 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
 include_directories(/usr/include/gtk-2.0  
                     /usr/include/cairo
                     etc. etc.
                    )
 add_library(the_name_of_your_target gtk-x11-2.0 gdk-x11-2.0 ETC. ETC.)
 link_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../../lib/bin)