我最近升级到了 Windows 7,它似乎希望我们将文件组织到独立于存储文件的物理文件夹的“库”中。
我的数据存储在与 Windows 不同的驱动器上,因此单独备份。如何确保库结构与我的数据一起备份?当我重新安装 Windows 时(我定期这样做),我不想丢失我所有的图书馆组织。
下面是一个例子:
~$ ls /lib/*.so* | head -n 10
/lib/ld-2.13.so
/lib/ld-Linux.so.2
/lib/libacl.so
/lib/libacl.so.1
/lib/libacl.so.1.1.0
/lib/libanl-2.13.so
/lib/libanl.so.1
/lib/libattr.so
/lib/libattr.so.1
/lib/libattr.so.1.1.0
Run Code Online (Sandbox Code Playgroud)
后面的数字so(例如最后一行)1.1.0是什么意思?
我的第一个猜测是它们是版本号,但是:
~$ pacman -Qo /lib/libattr.so*
/lib/libattr.so is owned by attr 2.4.46-1
/lib/libattr.so.1 is owned by attr 2.4.46-1
/lib/libattr.so.1.1.0 is owned by attr 2.4.46-1
Run Code Online (Sandbox Code Playgroud)
所以1.1.0似乎与库的版本没有任何联系,据报道是2.4.46.
我不得不承认,每次我必须满足某些 C 或 C++ 代码的依赖关系时,我都感到完全迷失了。目前,我使用的是Ubuntu 9.10(Karmic Koala),但我还记得 Windows 中同样的凄凉感觉。
我真的认为我确实了解 C、C++、静态和动态库、头文件和链接,以及数据包管理器的“能力”,但是说到实践部分,我完全不知道该怎么做。即使我以某种方式管理它,我也不知道我是如何到达那里的,也没有从中学到任何东西。
例如,今天我想使用声明“它使用 glib2、curl 和 openssl”的代码。最后,我想通了curl并且openssl已经安装了,但是我需要libcurl3-dev通过我的数据包管理器进行安装,这也需要(并安装),libcurl4-openssl-dev这样我就不必担心 OpenSSL。但我不得不从 67 个听起来相似的替代方案中选择这些数据包名称。并且glib,另一方面,由于根本没有匹配的数据包,因此必须手动下载和构建。
我花了几个小时才发现这一点,这不是第一次。所以我的问题是:
当我对依赖项有一个模糊的描述时:
我需要通过解析来找出休眠文件中存储了哪些数据。但是,到目前为止,我只能通过在十六进制编辑器中打开它然后在其中搜索字符串来手动执行此操作。
我了解了SandMan 库,但没有任何资源。知道如何读取文件吗?或者是否有任何工具/库或其他方法可以这样做?
我只是尝试运行通过 .deb 包安装的程序并收到此错误:
error while loading shared libraries: libreadline.so.5: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)
有谁知道libreadline是哪个库或包的一部分?如果是这样,我如何安装并确保它是第 5 版?
谢谢!
如果我在 Windows 7 命令提示符下,有什么方法可以导航到我的库之一?
例如像
cd libraries:\code
Run Code Online (Sandbox Code Playgroud) 当 unix/linux 程序需要“东西”时,我通常将(或 dpkg 为我放置)库和头文件分别放在 /usr/lib 和 /usr/include 中。
我最近下载了一个我希望在 Windows 上使用的库,最近在我的 linux 机器上这样做之后,它提供了一个预构建的 Windows 二进制文件的下载。当然,这带有属于库的 .dll、.lib 和 .h 文件。
我的问题是,是否有任何范例或模式可以放置这些文件,以便我可以从几个不同的程序/源文件中使用它们?随库提供的 README 没有提到这一点,所以请原谅我对 unix 的无知。另外,我使用的是命令行/gcc 工具链,而不是 VC。
在我没有 root 访问权限并且未安装 FUSE 的系统上(或者我没有足够的权限来创建新的挂载),如何启动保险丝文件系统(例如 sshfs 或一些基于 FUSE 的系统) unionfs)并从(通常)任何通过 LD_PRELOAD hack 实现的程序访问它,而不涉及内核或 root 权限?
\n我正在寻找一种现有的解决方案,例如其中之一(或可以轻松组装以获得其中之一的砖块):
\nmylib_open、mylib_write、mylib_close\xe2\x80\xa6 等函数的库,这些函数将调用转发到 FUSE 文件系统。这使得从源代码(仅#define open mylib_open)编译时修补特定程序或修补 proot、fakechroot、AVFS 或其他一些 vfs 变得相当容易。qemu-user可以用来在自己的环境中运行真正的FUSE,因为qemu-user不模拟内核IIUC,并且安装qemu-system现在通常需要root,并且尝试在没有root权限的情况下运行qemu-systemkvm会很慢。我发现了类似的问题,但没有一个解决与现有 …
假设一组定制的gcc/glibc/binutils都在$prefix(例如/home/user/path)
我想要:
gcc寻找图书馆$prefix/lib64而不是/lib64gcc寻找标题$prefix/include而不是/include$prefix/lib64/ld-linux-x86-64.so.2作为(硬编码)装载机路径,而不是/lib64/ld-linux-x86-64.so.2$prefix/lib64而不是/lib64我应该如何配置构建?我需要修改gcc's specs 文件或做其他事情吗?
背景:我们的 Linux 发行版有一个第三方供应商软件,我们目前正在测试该软件lubuntu。我们有安装文件和install.shshell 脚本,用于在正确的目录中安装该软件所需的二进制文件。
我们想确定该软件在内部使用哪些静态库(这样我们就可以判断它们是否已过时并在我们的环境中引入漏洞)。
到目前为止我们所做的:我们查看了ldd但它只列出了共享库或动态库。与 相同objdump。我们过去常常strings查看隐藏在其中一些二进制文件中的字符串,以查看库版本号等的标志。但对于大型二进制文件来说,这是一个非常耗时且低效的过程。
问题:在Linux环境下如何发现并列出软件中使用的静态库?