Questions tagged «libraries»

库是程序可以使用的功能的集合。它们可以由程序动态加载,也可以编译到程序中。



2
为什么共享库可执行?
为什么几乎所有共享库/usr/lib/都设置了可执行权限?我看不到有执行它们的用例。有些人确实设法连接了某种形式的main功能以打印简短的版权和版本说明,但许多人甚至没有这样做,并且在执行时出现段错误。 那么,设置这个有x什么意义呢?所有图书馆包装商都必须这样做吗?如果我dlopen()拥有共享库,将会怎样0644?

2
在/ usr / local / lib中使用共享库
我已经从源代码构建了一些库,之后的文件make install在/usr/local/lib 例如,就我而言,我有libodb-2.2.so此目录中的文件。 但是,当我启动与链接的可执行文件时,libodb出现错误:加载共享库时出错:libodb-2.2.so: cannont open shared object file: No such file or directory. 这是否意味着我的可执行文件构建不正确?还是应该指示系统文件夹中/usr/local/lib也可能有一些有趣的库? 我正在使用Ubuntu 12.04,Linux内核3.2.0-38-generic。
58 ubuntu  libraries 

1
lib,lib32,lib64,libx32和libexec之间的区别
我的64位Ubuntu 13.04系统在以下位置具有以下目录/: lib lib32 lib64 libx32 libexec 在/usr目录中有: lib lib32 libx32 libexec 似乎可以通过搜索轻松地找到答案,但是我没有在网上发现任何东西,除了这些目录存储共享库(libexec除外)。但是哪些共享库位于哪个文件夹中(lib32中的32位和lib64中的64位除外)?有人可以解释所有这些目录之间的区别吗?

1
加载共享库和RAM使用率
我想知道Linux管理共享库的方式。(实际上,我说的是Maemo Fremantle,这是2009年发行的基于Debian的发行版,运行于256MB RAM上)。 假设我们有两个链接到libQtCore.so.4并使用其符号(使用其类和函数)的可执行文件。为了简单起见,我们将它们称为a和b。我们假设两个可执行文件都链接到相同的库。 首先我们启动a。必须加载该库。它是整体加载还是仅在所需部分加载到内存(因为我们不使用每个类,因此仅加载有关所用类的代码)? 然后我们启动b。我们假设它a仍在运行。b也链接到libQtCore.so.4并使用一些使用的类a,但也使用了一些未被使用的类a。库是否会被双重加载(分别用于a和分别加载b)?或者他们将使用RAM中已经存在的相同对象。如果不b使用任何新符号并且a已经在运行,则共享库使用的RAM是否会增加?(或者差异不大)

4
查看Linux库/可执行版本信息
在Windows中,EXE和DLL具有版本信息,至少包括以下字段: 文件版本 产品版本 内部名称 产品名称 版权 在Linux库/可执行文件中: 存在哪些字段? 如何查看此类信息? 要阅读哪些工具/库?

2
更改给定可执行文件的链接库(CentOs 6)
我有这样的可执行文件链接: $ ldd a.out libboost_system-mt.so.1.47.0 => /usr/lib64/libboost_system-mt.so.1.47.0 (0x00007f4881f56000) libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007f4881cfb000) libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x00007f4881965000) librt.so.1 => /lib64/librt.so.1 (0x00007f488175d000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f4881540000) libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f4881239000) . . libcrypto和libssl库是openssl 1.0.0-fips库。我想尝试使用1.0.1库,因此已在主目录中构建了它们。有没有办法a.out轻松地与新的openssl库重新链接?我想避免 必须重新链接a.out(因为构建工具非常复杂) 更改任何全局设置(因为其他开发人员在此计算机上工作) 是否可以做我希望在这里做的事情?
29 libraries  linker 

4
如何从外壳执行库命令?
我只想简单地计算一个字符串的长度(即哈希值)。因此,我打开终端并执行以下操作: $ apropos length 返回给我的是一堆在其末尾带有(3)或(3ssl)附加的命令/功能。现在,男人给了我们有关这些section numbers含义的信息。 3 Library calls (functions within program libraries) 出于好奇,我只是尝试了所有这些命令(希望至少可以使用) strcspn (3) - get length of a prefix substring strlen (3) - calculate the length of a string strnlen (3) - determine the length of a fixed-size string strspn (3) - get length of a prefix …
27 shell  libraries 


1
为什么Unix / Linux系统不遍历目录,直到找到所需的链接库版本?
我有一个名为“ alpha”的二进制可执行文件,它需要一个链接库(libz.so.1.2.7),该库位于 /home/username/myproduct/lib/libz.so.1.2.7 我通过执行以下命令在生成二进制可执行文件之前将其导出到终端实例。 export LD_LIBRARY_PATH=/home/username/myproduct/lib/:$LD_LIBRARY_PATH 现在,当我生成另一个需要相同库但版本不同的应用程序“ bravo”时,即(libz.so.1.2.8)(可在中使用) /lib/x86_64-linux-gnu/libz.so.1.2.8,系统抛出以下错误。 version `ZLIB_1.2.3.3' not found (required by /usr/lib/x86_64-linux-gnu/libxml2.so.2) 如果我未设置LD_LIBRARY_PATH,则“ bravo”启动正常。我了解上述行为是因为LD_LIBRARY_PATH在/etc/ld.so.conf查找链接库时优先于在其中定义的目录路径,因此发生了上述错误。我只是很好奇一个为什么UNIX / LINUX的开发人员没有设计OS以便如果库的第一个实例是不同版本的情况下就根据层次结构在其他目录中搜索链接的库。 简而言之,UNIX / LINUX系统遍历一组目录,直到找到所需的库为止。但是,为什么在找到期望的版本而不是接受库的第一个实例而不考虑其版本之前,它不做同样的事情?

6
ldd告诉我我的应用程序“不是动态可执行文件”
我有一个来自天文学教授的32位应用程序(称为uclsyn)。一年前,我设法使其在CentOS上运行,但是现在,当我设置一个新的CentOS VM时,它将无法运行,并且我也无法找出原因。它总是以“杀死”回来。 这是命令行上的交换: $ ./uclsyn_linux Killed $ ldd ./uclsyn_linux not a dynamic executable $ file ./uclsyn_linux uclsyn_linux: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped 在运行的机器上,“ ldd ./uclsyn_linux”返回完整的依赖项列表。我发现提供了这些共享库的软件包,它们似乎都已安装。 需要包装 libSM-1.1.0-7.1.el6.i686 libX11-1.3-2.el6.i686 libgcc-4.4.6-3.el6.i386 glibc-2.12-1.47.el6_2.9.i686 libuuid-2.17.2-12.4.el6.i686 libXau-1.0.5-1.el6.i686 我检查并已经安装了应用程序本地的大量库。 我的环境 在VirtualBox下运行的CentOS uname …
17 centos  libraries 

3
gcc无法链接到pthread?
我最近安装了64位XUbuntu 11.10,但是在编译最简单的pthread示例时遇到问题。 这是代码pthread_simple.c: #include <stdio.h> #include <pthread.h> main() { pthread_t f2_thread, f1_thread; void *f2(), *f1(); int i1,i2; i1 = 1; i2 = 2; pthread_create(&f1_thread,NULL,f1,&i1); pthread_create(&f2_thread,NULL,f2,&i2); pthread_join(f1_thread,NULL); pthread_join(f2_thread,NULL); } void *f1(int *x){ int i; i = *x; sleep(1); printf("f1: %d",i); pthread_exit(0); } void *f2(int *x){ int i; i = *x; sleep(1); …
17 c  libraries  gcc  xubuntu 


1
/ usr / lib64去哪里了,什么是/ usr / lib / x86_64-linux-gnu?
我有两个Ubuntu-x86_64系统。一个是版本10.04,另一个是版本12.04,并且lib目录的结构有所不同。这并不令我感到惊讶,但我很好奇是否有人知道原因。有一个很好的理由吗? 10.04 2.6.32-38-server #83-Ubuntu SMP Wed Jan 4 11:26:59 UTC 2012 x86_64 GNU/Linux /usr/lib /usr/lib32 /usr/lib64 12.04 3.2.0-23-generic #36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012 x86_64 GNU/Linux /usr/lib /usr/lib/x86_64-linux-gnu

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.