Questions tagged «shared-libraries»

共享库是程序启动时由程序加载的库。每个库的单个共享副本被加载到物理内存中,并且可以被多个进程同时使用。这样可以减少内存使用并提高系统性能。请勿单独使用此标签。




19
加载共享库时发生Linux错误:无法打开共享对象文件:没有这样的文件或目录
该程序是Xenomai测试套件的一部分,可从Linux PC交叉编译为Linux + Xenomai ARM工具链。 # echo $LD_LIBRARY_PATH /lib # ls /lib ld-2.3.3.so libdl-2.3.3.so libpthread-0.10.so ld-linux.so.2 libdl.so.2 libpthread.so.0 libc-2.3.3.so libgcc_s.so libpthread_rt.so libc.so.6 libgcc_s.so.1 libstdc++.so.6 libcrypt-2.3.3.so libm-2.3.3.so libstdc++.so.6.0.9 libcrypt.so.1 libm.so.6 # ./clocktest ./clocktest: error while loading shared libraries: libpthread_rt.so.1: cannot open shared object file: No such file or directory 编辑:确定,我没有注意到文件名末尾的.1。那到底是什么意思呢?

1
.so,.la和.a库文件有什么区别?
我知道.so文件是一种动态库(很多线程可以共享这样的库,因此在内存中不需要多个副本)。但是.a和之间有什么区别.la?这些都是静态库吗? 如果动态库比静态库具有很大的优势,那么为什么仍然有很多静态库? 我还想知道加载库(两种)的基本机制,以及在某处使用lib时如何调用一段代码。我应该学习内核的哪一部分?我应该了解什么相关的Linux命令/实用程序才能知道进程如何运行?(我现在只知道ld命令) 什么时候应该尝试将代码内置到.so或中.a?哪一个更好? [mirror@home ins_openvpn]$ ls lib/openvpn/plugins/ -l total 96 -rw-r--r-- 1 mirror mirror 22892 Sep 2 23:25 openvpn-plugin-auth-pam.a -rwxr-xr-x 1 mirror mirror 931 Sep 2 23:25 openvpn-plugin-auth-pam.la -rwxr-xr-x 1 mirror mirror 23621 Sep 2 23:25 openvpn-plugin-auth-pam.so -rw-r--r-- 1 mirror mirror 17228 Sep 2 23:25 openvpn-plugin-down-root.a -rwxr-xr-x 1 mirror …



7
ld找不到现有的库
我正在尝试在此Debian lenny系统上使用g ++链接应用程序。ld抱怨找不到指定的库。这里的特定示例是ImageMagick,但其他一些库也遇到类似的问题。 我通过以下方式调用链接器: g++ -w (..lots of .o files/include directories/etc..) \ -L/usr/lib -lmagic ld抱怨: /usr/bin/ld: cannot find -lmagic 但是,libmagic存在: $ locate libmagic.so /usr/lib/libmagic.so.1 /usr/lib/libmagic.so.1.0.0 $ ls -all /usr/lib/libmagic.so.1* lrwxrwxrwx 1 root root 17 2008-12-01 03:52 /usr/lib/libmagic.so.1 -> libmagic.so.1.0.0 -rwxrwxrwx 1 root root 84664 2008-09-09 00:05 /usr/lib/libmagic.so.1.0.0 $ ldd /usr/lib/libmagic.so.1.0.0 …

4
Linux上的C ++动态共享库
这是使用g ++进行动态共享库编译的后续版本。 我正在尝试在Linux上的C ++中创建一个共享的类库。我可以编译该库,并且可以使用在此和此处找到的教程来调用某些(非类)函数。当我尝试使用库中定义的类时,我的问题开始了。我链接到的第二篇教程展示了如何加载用于创建库中定义的类的对象的符号,但是没有使用这些对象来完成任何工作。 有谁知道用于创建共享C ++类库的更完整的教程,该教程还显示了如何在单独的可执行文件中使用这些类?一个非常简单的教程,介绍了对象的创建,使用(简单的getter和setter方法就可以了)和删除操作是非常棒的。链接或引用某些开源代码来说明共享类库的使用也同样不错。 尽管来自codelogic和nimrodm的答案确实有用,但我只是想补充一点,因为提出了这个问题,所以我选择了《Beginning Linux Programming》的副本,并且其第一章包含示例C代码以及有关创建和使用静态库和共享库的良好解释。 。这些示例可通过该书的旧版中的 Google图书搜索获得。


4
从C调用Go函数
我正在尝试创建一个用Go语言编写的静态对象,以与C程序(例如,内核模块)交互。 我已经找到了有关从Go调用C函数的文档,但是关于如何走另一条路却找不到很多。我发现这是可能的,但是很复杂。 这是我发现的: 有关C和Go之间的回调的博客文章 CGO文档 Golang邮件列表帖子 有任何人对此有经验吗?简而言之,我正在尝试创建一个完全用Go编写的PAM模块。

4
如何使用cmake创建共享库?
我已经编写了一个库,该库过去是使用自写的Makefile进行编译的,但是现在我想切换到cmake。树看起来像这样(我删除了所有不相关的文件): . ├── include │ ├── animation.h │ ├── buffers.h │ ├── ... │ ├── vertex.h │ └── world.h └── src ├── animation.cpp ├── buffers.cpp ├── ... ├── vertex.cpp └── world.cpp 因此,我想做的就是将源代码编译到共享库中,然后将其与头文件一起安装。 我发现的大多数示例都使用一些共享库来编译可执行文件,而不仅仅是一个普通的共享库。如果有人可以告诉我一个使用cmake的非常简单的库,这也将很有帮助,因此我可以以此为例。


7
为什么Python无法找到sys.path目录中的共享对象?
我正在尝试导入pycurl: $ python -c "import pycurl" Traceback (most recent call last): File "<string>", line 1, in <module> ImportError: libcurl.so.4: cannot open shared object file: No such file or directory 现在,libcurl.so.4在中/usr/local/lib。如您所见,这是在sys.path: $ python -c "import sys; print(sys.path)" ['', '/usr/local/lib/python2.5/site-packages/setuptools-0.6c9-py2.5.egg', '/usr/local/lib/python25.zip', '/usr/local/lib/python2.5', '/usr/local/lib/python2.5/plat-linux2', '/usr/local/lib/python2.5/lib-tk', '/usr/local/lib/python2.5/lib-dynload', '/usr/local/lib/python2.5/sitepackages', '/usr/local/lib', '/usr/local/lib/python2.5/site-packages'] 任何帮助将不胜感激。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.