问题标签 [static-libraries]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1849 浏览

shared-libraries - Will multiple instances of an executable (built with static libraries) share anything on RAM

Assume a executable foo.exe is built based on static libraries and 6 instances of this foo.exe are running at the same time on the a machine. Since all the code is same (read only part) except for the read write part on the RAM, will there be any sharing amongst these 6 instances in the RAM to improve performance ?

I do know that if the above foo.exe uses shared libraries instead ,even though there are 6 instances running only 1 instance of these shared libraries will be in the RAM.

0 投票
1 回答
3694 浏览

linux - Linux下的静态库安装 - 它应该类似于动态库安装吗?

我花了一上午的时间研究如何在 makefile 中在 Linux 下进行共享库安装。

所以没关系;我现在有我的共享对象和一对指向它的软链接,其中一个由 ldconfig 创建,一个由我创建。

现在,我还可以将我的库构建为静态库。

当我检查 /usr/lib 时,我看到 .a 文件就在那里……在那里。没有符号链接,文件名中没有版本和版本编号的排列。

我是否应该像排列共享对象一样排列带有符号链接的静态库,或者实际上只是将一个未经修饰的静态库放入 /usr/local/lib 中?

0 投票
1 回答
926 浏览

python - Linux 64 位上的 mysql-python 静态链接

有没有人尝试在 64 位 Linux 上将 mysql-python 与 mysql 客户端库静态链接?

另请参阅:mysql-python:在 Mac OS X 上构建完全独立的 _mysql.so?

0 投票
2 回答
3011 浏览

linux - 如何为旧的 linux 发行版构建应用程序,并避免 FATAL: kernel too old 错误?

我在 linux 上分发我的应用程序的静态链接二进制版本。但是,在使用 2.4 内核的系统上,我在启动时收到段错误,并显示消息:“致命:内核太旧。”

我怎样才能轻松地启动并运行 2.4 内核的版本?我需要的一些库甚至在 2003 年左右的旧 linux 发行版上都不可用。是否有 apt-get install 或其他可以让我轻松定位旧内核的东西?

0 投票
5 回答
810 浏览

linux - 现代 Linux 发行版中共享库真正节省了多少磁盘空间?

在静态库与共享库的争论中,我经常听说共享库消除了重复并减少了整体磁盘空间。但是共享库在现代 Linux 发行版中真正节省了多少磁盘空间?如果所有程序都使用静态库编译,需要多少空间?有没有人计算过典型桌面 Linux 发行版(例如 Ubuntu)的数字?有没有可用的统计数据?

附录:

所有答案都提供了丰富的信息并受到赞赏,但他们似乎拒绝了我的问题,而不是试图回答它。Kaleb 是在正确的轨道上,但他选择计算内存空间而不是磁盘空间的数字(我的问题是磁盘空间)。

因为程序只为它们使用的部分静态库“付费”,所以几乎不可能定量地知道所有静态与所有共享的磁盘空间差异。

现在我意识到几乎不可能回答我的问题,我觉得我的问题很糟糕。但我会把它留在这里以保留信息丰富的答案。

所以 SO 不再唠叨我选择一个答案,我将选择最受欢迎的一个(即使它回避了这个问题)。

0 投票
1 回答
504 浏览

c++ - 不一致的运算符 new/delete 调用

我在调用我的重载运算符 delete 但不是我的 operator new 的动态链接库时遇到了一些问题。我的 exe 看起来像这样:

然后我有一个静态链接库,其中有我的全局重载运算符和导致问题的动态链接库。基本上发生的情况是,dynLib::Type 类型包含一个 std::vector,它在其构造函数中添加一个元素。所以类型看起来像这样

当调用 func() 时,会创建一个新的 Type 实例,通过值传递,然后分配给 t。在那里工作的 operator= 也通过其 operator= 复制 std::vector。这反过来又在 t 中的旧 std::vector 上调用 deallocate,因为它已经在其构造函数中添加了一个元素。这个取消分配调用最终调用我的操作员删除。问题是,我的 operator new 从未被调用,因此它正在删除一个完全不同的内存空间中的指针(内存日志显示了这一点)。

现在,我可能只是错过了一些东西。由于上面的 A 类包含一个 dynLib::Type 对象,它可能会在我的 operator new (来自静态库)被链接之前构建。这甚至可能吗?我不太确定在什么时候调用了组合 dynLib::Type 的构造函数。动态库使用默认的 stl 分配器,因此它不会做任何时髦的事情。

我尝试在没有动态链接库的情况下重新创建相同的情况,只需在我的 exe 中使用 Type 类。这不会导致问题,所以它让我相信它一定与链接顺序有关。

0 投票
2 回答
202 浏览

c++ - 将类重组为静态库

我将尝试重新组织我的小组构建一组大型应用程序的方式,这些应用程序共享大约 90% 的源文件。目前,这些应用程序的构建没有涉及任何库,除了不受我们控制的外部链接库。应用程序使用相同的公共源文件(我们没有维护相同 .h/.cpp 文件的 5 个版本),但这些没有内置到任何公共库中。因此,目前,每次我们打算发布一个版本时,我们都在为每个应用程序一遍又一遍地构建相同的代码付出代价。对我来说,这听起来像是使用库来捕获共享代码并减少构建时间的主要候选者。我没有使用 DLL 的选项,所以方法是使用静态库。

我想知道您对如何完成这项任务有什么建议。我在创建/组织静态库方面的经验有限,所以即使是对组织/陷阱的基本建议也是受欢迎的。也许甚至是一本好书推荐?

通过查找每个应用程序共有的文件的整个子集,我做了一个简短的练习。作为概念证明,我将这些文件放在一个“Common Monster”静态库中。使用这个单一的静态库构建完整的应用程序肯定会缩短所有应用程序的构建时间,但我应该把它留在这里吗?这种形式的库的目的不是很集中,似乎是对模块化的懒惰尝试。这些应用程序正在持续开发中,我担心这种设置会进一步导致问题。

0 投票
3 回答
2386 浏览

c++ - .lib 和 .obj 彼此之间以及我在 C++ 中的项目有什么关系?

.lib 和 .obj 文件如何相互关联?他们的目的是什么?.lib 只是 .obj 文件的集合吗?如果是这样,那么 .obj 是否存储在 .lib 中,从而使 .obj 变得不必要?

0 投票
2 回答
235 浏览

linux - Linux - 有没有办法拥有一个包含资源的简单静态库?

可能重复:
是否有相当于 Windows 的“资源文件”的 Linux 版本?

我试图找出一种将资源嵌入静态库的方法,以便使用 gcc 工具链与 C 源链接。相当于嵌入资源的 Windows DLL。这可以用linux静态库来完成吗?

简而言之,例如,这样做 cat someresourcedata.txt > mylib.a并能够将其与引用的已编译 C 代码链接mylib.a

有什么想法或建议吗?

0 投票
1 回答
484 浏览

makefile - 我可以创建一个具有共享库和静态库的共享库吗

我正在尝试创建一个共享库,该库在内部链接到许多共享库和一个静态库。就我而言,我的共享库不包括 static lib 。我想知道我在尝试什么是否正确,或者我需要将静态库转换为共享库然后进行链接。

我需要知道是否有任何 makefile 标志允许我添加静态库和共享库。

请建议。