精华内容
下载资源
问答
  • http://bbs.9ria.com/thread-81330-1-1.html<br />  关于这个发的帖子,目前好像还没很好的解决方法... 换个角度来想,本来方法共享库里面的都是一些通用的,不会太改的东西,专门写个类也可以接受了

    http://bbs.9ria.com/thread-81330-1-1.html

     

    关于这个发的帖子,目前好像还没很好的解决方法,就专门写个类来绑定吧。

    换个角度来想,本来方法共享库里面的都是一些通用的,不会太改的东西,专门写个类也可以接受了

    展开全文
  • 错误提示如下: error while loading shared libraries: ...原因一般有两个,一个是操作系统中没有包含该共享库(lib*.so.* 文件)或者共享库版本不对。解决办法就是重新下载安装。 另外一个原因就是已经安装了

    错误提示如下:

    error while loading shared libraries: libjson.so.0: cannot open shared object file: No such file or directory

    原因一般有两个,一个是操作系统中没有包含该共享库(lib*.so.* 文件)或者共享库版本不对。解决办法就是重新下载安装。


    另外一个原因就是已经安装了该共享库,但是执行需要调用该共享库的程序的时候,程序按照默认共享库路径找不到该共享库文件。解决方法如下:

    • 如果共享库文件安装到了 /lib 或 /usr/lib 目录下,那么执行一下 ldconfig 命令。
      ldconfig命令的用途, 主要是在默认搜寻目录(b和/usrb)以及动态库配置文件/etc/ld.so.conf内所列的目录下, 搜索出可共享的动态链接库(格式如lib*.so*), 进而创建出动态装入程序(ld.so)所需的连接和缓存文件. 缓存文件默认为/etc/ld.so.cache, 此文件保存已排好序的动态链接库名字列表. 

    • 如果共享库文件安装到了 /usr/local/lib (一般开源的共享库都会安装到该目录下)或者其它非 /lib 或 /usr/lib 目录下,那么在执行 ldconfig 命令前,还要把新的共享库目录加入到共享库配置文件 /etc/ld.so.conf 中,如下:
      # cat /etc/ld.so.conf
      include ld.so.conf.d/*.conf
      # echo "/usr/local/lib" >> /etc/ld.so.conf
      # ldconfig
      或者在 /etc/ld.so.conf.d/ 目录下新建任何以 .conf 为后缀的文件,在该文件中加入库文件所在的目录。然后执行 ldconfig 更新 /etc/ld.so.cache 文件。

    • 如果共享库文件安装到了其他非 /lib 或 /usr/lib 目录下,但是又不想在 /etc/ld.so.conf 文件中加共享库路径(或者是没有权限加路径)。那可以 export 一个全局变量 LD_LIBRARY_PATH,然后运行程序的时候就会去找个目录中找共享库。
      LD_LIBRARY_PATH的意思是告诉loader在哪些目录中可以找到共享库. 可以设置多个搜索目录, 这些目录之间用冒号分隔开. 比如安装了一个mysql到/usr/local/mysql目录下, 其中有一大堆库文件在/usr/local/mysql/lib下面, 则可以在.bashrc或.bash_profile或shell里加入以下语句即可:
      
      export LD_LIBRARY_PATH=/usr/local/mysql/lib:$LD_LIBRARY_PATH    
      
      一般来讲这只是一种临时的解决方案, 在没有权限或临时需要的时候使用.

    • 如果程序需要的库文件比系统目前存在的库文件版本低,可以做一个链接。比如:
      error while loading shared libraries: libncurses.so.4: cannot open shared
      object file: No such file or directory
      
      ls /usr/lib/libncu*
      /usr/lib/libncurses.a   /usr/lib/libncurses.so.5
      /usr/lib/libncurses.so  /usr/lib/libncurses.so.5.3
      
      可见虽然没有libncurses.so.4,但有libncurses.so.5,是可以向下兼容的
      建一个链接就好了
      ln -s  /usr/lib/libncurses.so.5.3  /usr/lib/libncurses.so.4

    展开全文
  • 我在工作中无法运行eclipse遇到问题-在我的家用台式机上,我获得了所有的64位版本。我所做的是将文件夹复制到我的工作...如果我将虚拟机设置为C: jre7 bin client jvm.dll我收到"无法加载共享库"的错误消息我的来...

    我在工作中无法运行eclipse时遇到问题-在我的家用台式机上,我获得了所有的64位版本。我所做的是将文件夹复制到我的工作桌面,但没有。我在这里检查了体系结构,它也是64位。失败来自双方:

    如果我将虚拟机设置为:

    C: jre7 bin javaw.exe

    我收到来自代码13的错误。

    如果我将虚拟机设置为

    C: jre7 bin client jvm.dll

    我收到"无法加载共享库"的错误消息

    我的来源研究是:

    无法加载JNI共享库(JDK)

    Eclipse报告"无法加载JNI共享库"

    无法运行Eclipse; JVM已终止。退出代码= 13

    无法启动Eclipse-Java已启动,但返回了退出代码= 13

    Eclipse在启动时崩溃;退出代码= 13

    恢复:

    家用台式机-Windows 64,JRE 64,Eclipse Juno 64

    作业桌面-Windows 64,JRE 64,Eclipse Juno 64

    有人知道我能做什么吗?由于我的研究,我所做的一切都是徒劳的。

    尝试安装Java Development Kit JDK。

    您可能只安装了JRE。 这以前发生在我身上,这就是我如何解决它。

    http://www.oracle.com/technetwork/java/javase/downloads/index.html

    可能是解决方案,在我的家用计算机上,我有JDK,我将对其进行检查并反馈是否有效,TY

    您说得对,谢谢您的提示

    我遇到了这个问题。 我的原因是我还有一些其他软件(例如oracle)包括某些版本的JVM,但没有JNI。 此类软件的安装为Path变量添加了一些内容。 然后蚀搜索该路径并失败。

    请检查您的Path环境变量,看看在正确的JVM路径之前是否存在任何错误的路径,或者只是尝试将JVM bin路径移到所有其他路径的前面。

    我无法访问安全协议的PATH cos,但Colin是正确的-在我的情况下,缺少JDK,在这里起作用。 但是要获得支持。

    展开全文
  • QT关于共享库 shared library。

    千次阅读 2011-10-25 11:04:14
    今天来说的是关于共享库 shared library。...这些 dll 其实就是一些共享库,所谓共享库,其实就是一些动态链接库,能够由程序在运行时进行动态加载的库。既然说是共享,那就是说,这些库不仅仅自己的程序可以使

    欢迎加入我们的QQ群,无论你是否工作,学生,只要有c / vc / c++ 编程经验,就来吧!158427611 

    欢迎加入我们的QQ群,无论你是否工作,学生,只要有c / vc / c++ 编程经验,就来吧!158427611

    今天来说的是关于共享库 shared library。

    如果你打开一些 Windows 应用程序的目录,你会发现有很多程序的 exe 文件都很小,大约几百K 的样子,并且目录中不仅仅只有一个 exe 文件,还包含着一大堆 dll 文件。这些 dll 其实就是一些共享库,所谓共享库,其实就是一些动态链接库,能够由程序在运行时进行动态加载的库。既然说是共享,那就是说,这些库不仅仅自己的程序可以使用,并且其他程序也可以使用,例如某些通用算法。如果你发布一下自己编写的 Qt 程序,也会看到很多系统的共享库,就是那些 QtGui.dll 之类的东西。或许你会说,我写的程序没有同其他应用共享的库,就不需要这些了吧!其实不然。因为共享库的一个好处是可以动态加载,也就是说,如果你需要升级程序,那么就要简单的替换掉这个 dll 就好了,不需要要求用户重新安装全部文件。当然,这些 dll 也是有缺点的:动态加载的东西肯定会比静态编译的东西效率低一些。不过在现在的硬件环境下,这点性能损失已经可以忽略不计了。

    今天我们要说的就是如何用 Qt 创建共享库代码。

    我们还是使用 QtCreator。在创建工程的时候,我们选择下面的 C++ Library 一项,然后点击 OK。

    在接下来的对话框中,有一个下拉列表,分别是 Shared Library(共享库),Statically Linked Library(静态链接库)和 Qt 4 Plugin(Qt 4 插件)。我们选择第一个共享库,后面的步骤中会要求选择加入哪几个 Qt 模块,和前面一样,选择自己需要的部分,最后完成工程的创建。

    我们会看到 QtCreator 已经帮我们创建好了一些文件。其中有一个 {projectName}_global.h 的文件是 QtCreator 替我们创建的。下面我们就从这个 {projectName}_global.h 开始:

    1. #ifndef LIB_GLOBAL_H  
    2. #define LIB_GLOBAL_H  
    3.  
    4. #include <QtCore/qglobal.h>  
    5.  
    6. #if defined(LIB_LIBRARY)  
    7. #  define LIBSHARED_EXPORT Q_DECL_EXPORT  
    8. #else  
    9. #  define LIBSHARED_EXPORT Q_DECL_IMPORT  
    10. #endif  
    11.  
    12. #endif // LIB_GLOBAL_H  

    这个文件中只是定义了两个宏 LIBSHARED_EXPORT,注意这里的 LIB 就是我的工程名字。如果定义了 LIB_LIBRARY,LIBSHARED_EXPORT 定义为 Q_DECL_EXPORT,否则定义为 Q_DECL_IMPORT。看这个名字,就知道这就是把对象导出的语句了。下面我们来编写一个窗口(如果你希望这么做,不要忘记在创建工程时勾选 QtGui 模块,默认是不勾选的):

    lib.h

    1. #ifndef LIB_H  
    2. #define LIB_H  
    3.  
    4. #include <QMainWindow>  
    5.  
    6. #include "lib_global.h"  
    7.  
    8. class LIBSHARED_EXPORT MainWindow : public QMainWindow {  
    9. public:  
    10.     MainWindow(QWidget *parent = 0);  
    11. };  
    12.  
    13. #endif // LIB_H 

    lib.cpp

    1. #include "lib.h"  
    2.  
    3. MainWindow::MainWindow(QWidget *parent)  
    4.     : QMainWindow(parent)  
    5. {  
    6. }  

    代码很简单,就是创建一个 MainWindow。同前面的代码唯一不同的是,在头文件中,使用了 LIBSHARED_EXPORT 这个宏。你可以简单的把它理解成,我需要把这个类 MainWindow 导出。所谓导出,就是将其编译成一个 dll 文件之后,其他的类可以使用这个导出类。好了,下面和原来一样,编译一下这个工程。在 debug 文件夹下你得到的是一个 lib.dll 文件和 liblib.a。后者是 Linux 下使用的库,这里不再详述。

    好了,我们要去使用这个 dll 了。新建另外一个工程,需要吧 .pro 文件修改一下:

    1. TARGET = test  
    2. TEMPLATE = app  
    3.  
    4. SOURCES += main.cpp  
    5.  
    6. INCLUDEPATH += ../  
    7.  
    8. LIBS += ../debug/lib.dll 

    首先,我们添加了 INCLUDEPATH 这一行。这一行就是为了让我们的 test 项目可以找到 lib.h 和 lib_global.h 这两个文件,你需要把这里的路径替换成符合你的工程的路径。LIBS 这一行则需要告诉编译器(注意,这里是编译器!)到哪里去找到这个 dll 文件。然后我们编写 main.cpp:

    1. #include <QtGui/QApplication>  
    2. #include "lib.h"  
    3.  
    4. int main(int argc, char *argv[])  
    5. {  
    6.     QApplication a(argc, argv);  
    7.     MainWindow w;  
    8.     w.show();  
    9.     return a.exec();  
    10. }  

    注意,我们使用了 lib.h,但是这个文件并没有在 HEADERS 里面声明,Qt 实际上就是从 INCLUDEPATH 这里去找到这个文件。MainWindow 在新建的 test 工程中并没有声明,那么它在哪里呢?当然就是在我们编译出来的 lib.dll 里面啦!我们知道,在链接的时候编译器需要找到实现入口,也就是必须定位到这个 dll,这就是由这个 LIBS 指定的地方。

    最后编译运行一下这个 exe 文件,怎么样?哦,如果你照我说的做了的话,你应该得到一个错误:找不到 lib.dll。怎么会找不到呢?不是使用 LIBS 指定了吗?请注意,我们强调了,这个指定是编译期的。dll 是动态链接库,也就是说,在 exe 运行的时候需要找到这个库。运行时查找的顺序是:当前路径 -> 系统路径(通常是 system32)。所以,要把我们先前生成的这个 lib.dll 复制到 exe 所在目录,然后直接双击一下这个 exe 文件。一个窗口出来了!有什么区别吗?运行起来是没有区别的,但是我们知道,这个窗口是在这个 dll 里面实现的!我们想往窗口里面加个按钮?没问题,那就加吧!加完之后重新编译一个新的 dll,复制到 exe 文件夹覆盖旧的,修改就完成啦!我们不需要修改这个 exe 了。

    这个时候我们再来回忆一下,我们使用自己创建的 dll 的时候,是不是就和使用 QtGui.dll 一样呢?只不过QtGui.dll 已经放在了库目录下, 不需要手动修改 .pro 文件添加 INCLUDEPATH 和 LIBS 罢了。

    欢迎加入我们的QQ群,无论你是否工作,学生,只要有c / vc / c++ 编程经验,就来吧!158427611

    欢迎加入我们的QQ群,无论你是否工作,学生,只要有c / vc / c++ 编程经验,就来吧!158427611 

    展开全文
  • ubuntu 添加共享库路径

    千次阅读 2018-12-08 21:13:58
    库文件在连接(静态库和共享库)和运行(仅限于使用共享库的程序)被使用,其搜索路径是在系统中进行设置的。一般 Linux 系统把 /lib 和 /usr/lib 两个目录作为默认的库搜索路径,所以使用这两个目录中的库不需要...
  • Ubuntu添加共享库路径

    千次阅读 2013-12-25 11:33:24
    关于Ubuntu添加共享库路径: 1. 将绝对路径写入 /etc/ld.so.conf ...库文件在连接(静态库和共享库)和运行(仅限于使用共享库的程序)被使用,其搜索路径是在系统中进行设置的。一般 Linux 系统把 /lib 和 /usr/lib 两
  • 用qmake搭建框架之加载静态、共享库

    千次阅读 2018-12-23 16:26:38
    三、运行时加载共享库 关于插件 关于打包   关于qmake的语法可以参考:http://doc.qt.io/qt-5/qmake-manual.html。这里是qt5的,qt4和qt5的写法还略有区别。 一般来说,我们使用qt creator建立的工程都是以....
  • 经过了静态链接的程序,是一个真正完整的可运行的程序,运行的时候不需要其它的东东,只需要os的kernel调用这个code就行了 静态链接中,最重要的一点:把libary中的binary 程序 添加到我们调用库函数
  • 最近使用开发的过程中出现了一个小问题,顺便记录一下原因和方法--程序链接 ... 经过了静态链接的程序,是一个真正完全的可运行的程序,运行的时候不需要其它的东东,只需要os的kernel调用这个code就行...
  • 这几天一直在看关于动态共享库的知识,但看到一个地方,就不懂了,在网上搜索了一下!也没有找到答案!希望有哪位高手,帮小弟解答一下,小弟不胜感激! 问题:动态共享库,顾名思义,可以在多个进程间,进行共享!...
  • 动态:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。 三、iOS里静态形式? .a和.framework 四、iOS里动态形式? .dylib和.framework
  • 静态链接就是把lib文件中用到的函数代码直接链接到目标程序中,程序运行时无需其他文件。而动态链接就是把调用的函数所在文件模块dll和调用函数在文件中的位置等信息链接到目标程序,程序在运行时再从dll中寻找...
  • 当使用动态链接库时,可执行文件exe会动态的加载这个函数。...静态是表示把MFC程序所需要的导入到.exe文件中,可以直接运行使用,“在共享DLL中使用MFC”表示在运行程序再导入动态链接。...
  • 程序运行是加载动态的几种方法: 第一种,通过ldconfig命令 ldconfig是一个动态链接管理命令,为了让动态链接为系统所共享,还需运行动态链接的管理命令它,ldconfig命令通常在系统启动时运行,而当一个用户...
  • 文章目录1、概述概述关于线程间共享说明2、线程 ...Java虚拟机定义了若千种程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机启动而创建, 随着虚拟机退出而销毁。另外一些则是与线程一
  • 在制作自己的发行版经常需要判断某条命令需要哪些共享库文件的支持,以确保指定的命令在独立的系统内可以可靠的运行; 在Linux环境下通过ldd命令即可实现,在终端下执行: ldd /bin/ls 。 即可得到/bin/ls命令的...
  • 子进程得到与父进程用户级虚拟地址空间相同的一份副本,包括代码和数据段、堆、共享库以及用户栈。子进程还获得与父进程任何打开文件描述符相同的副本,这就意味着当父进程调用fork,子进程可以读写父进程中打开的...
  • 关于Apache Airflow的注释 概念与资源 DAG(直接非循环图) 它是工作流,是要执行的所有任务的集合,以反映其关系和依赖性的方式进行组织。 默认参数,Context Manager e运算符 默认参数:与DAG上的所有任务共享的...
  • 二者的不同点在于代码被载入的时刻不同。...动态库的好处是,不同的应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的实例。带来好处的同时,也会有问题!如经典的DLL Hell问题,关于
  • 添加运行时共享库目录 运行使用共享库的程序需要加载共享库(不同于G++ 编译时指定的链接库),添加共享库的步骤: 修改文件 /etc/ld.so.conf 添加共享库目录 运行 ldconfig 同步更新一下 如: ...
  • Flash 文档可以使用以下数据加载调用之一从外部源加载数据:XML.load()、XML....另外,SWF 文件可以在运行时导入运行时共享库或另一个 SWF 文件中定义的资源。默认情况下,数据或 SWF 媒体(运行时共享库的情
  • 动态静态的完成

    2010-04-28 17:59:00
    有一篇很好的文章关于静态库:linux下库文件的创建和使用及其他 首先...一种是共享库,文件后缀为.so,在程序运行的时候才进行连接。库函数:在库文件里提供的函数。下面,我们用一个实例介绍一下怎么样创建库文件以及
  • 关于linux中找不到共享库的解决方案 如 opencv中编译没错,但是运行时却出现 error while loading shared libraries: libopencv_core.so.2.4: cannot open shared object file: Nosuch file or directory ...

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 368
精华内容 147
关键字:

关于运行时共享库