标签: shared-libraries

静态库和共享库之间的区别?

静态库和共享库有什么区别?

我使用Eclipse,有几种项目类型,包括静态库和共享库?一个人比另一个人有优势吗?

c c++ shared-libraries static-libraries

533
推荐指数
8
解决办法
22万
查看次数

何时使用动态库和静态库

在C++中创建类库时,可以在动态(.dll,.so)和静态(.lib,.a)库之间进行选择.它们之间有什么区别,何时适合使用哪种?

c++ dll shared-libraries dynamic-linking static-linking

426
推荐指数
11
解决办法
23万
查看次数

什么是.a和.so文件?

我目前正在尝试将C应用程序移植到AIX,我感到很困惑.什么是.a和.so文件以及它们在构建/运行应用程序时如何使用?

c unix compilation shared-libraries .a

401
推荐指数
4
解决办法
34万
查看次数

加载共享库时出现Linux错误:无法打开共享对象文件:没有此类文件或目录

Program是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                                 
Run Code Online (Sandbox Code Playgroud)

编辑:好的我没注意到.1的结尾是文件名的一部分.这究竟是什么意思?

linux shared-libraries file-not-found xenomai

321
推荐指数
11
解决办法
105万
查看次数

.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 mirror   932 Sep  2 23:25 openvpn-plugin-down-root.la
-rwxr-xr-x 1 mirror mirror 18805 Sep  2 23:25 openvpn-plugin-down-root.so
Run Code Online (Sandbox Code Playgroud)

linux memory-management shared-libraries ld static-libraries

216
推荐指数
1
解决办法
11万
查看次数

如何显示Linux中可执行文件使用的所有共享库?

我想知道我的系统上的可执行文件使用了哪些库.更具体地说,我想对使用最多的库以及使用它们的二进制文件进行排序.我怎样才能做到这一点?

linux shared-libraries

212
推荐指数
9
解决办法
30万
查看次数

如何查看Linux共享库导出的函数列表?

我想在Linux上查看共享库的导出函数.

什么命令允许我这样做?

(在Windows上我使用的程序取决于)

linux export shared-libraries

176
推荐指数
4
解决办法
17万
查看次数

ld找不到现有的库

我试图在这个Debian lenny系统上将应用程序与g ++链接起来.ld抱怨它无法找到指定的库.这里的具体示例是ImageMagick,但我也遇到了类似的问题.

我正在调用链接器:

g++ -w (..lots of .o files/include directories/etc..) \
-L/usr/lib -lmagic
Run Code Online (Sandbox Code Playgroud)

ld抱怨:

/usr/bin/ld: cannot find -lmagic
Run Code Online (Sandbox Code Playgroud)

然而,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 
    linux-gate.so.1 =>  (0xb7f85000)
    libz.so.1 => /usr/lib/libz.so.1 (0xb7f51000)
    libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7df6000)
    /lib/ld-linux.so.2 (0xb7f86000)
$ sudo ldconfig -v | grep "libmagic"
    libmagic.so.1 -> libmagic.so.1.0.0
Run Code Online (Sandbox Code Playgroud)

我如何进一步诊断这个问题,哪些可能是错的?我做的事情完全是愚蠢的吗?

linux linker gcc shared-libraries shared-objects

163
推荐指数
5
解决办法
59万
查看次数

Linux上的C++动态共享库

这是使用g ++进行动态共享库编译的后续内容.

我正在尝试在Linux上用C++创建一个共享类库.我能够编译库,我可以使用我在这里这里找到的教程调用一些(非类)函数.当我尝试使用库中定义的类时,我的问题开始了.我链接的第二个教程展示了如何加载符号来创建库中定义的类的对象,但是没有使用这些对象来完成任何工作.

Does anyone know of a more complete tutorial for creating shared C++ class libraries that also shows how to use those classes in a separate executable? A very simple tutorial that shows object creation, use (simple getters and setters would be fine), and deletion would be fantastic. A link or a reference to some open source code that illustrates the use of a shared class library would …

c++ linux shared-libraries

163
推荐指数
4
解决办法
21万
查看次数

使用gcc命令行从.c文件构建.so文件

我正在尝试为Linux动态库(.so文件)创建一个hello world项目.所以我有一个文件hello.c:

#include <stdio.h>
void hello()
{
    printf("Hello world!\n");
}
Run Code Online (Sandbox Code Playgroud)

如何hello()使用命令行中的gcc 创建导出的.so文件?

c linux gcc shared-libraries

145
推荐指数
1
解决办法
14万
查看次数