问题标签 [static-linking]

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 投票
2 回答
2667 浏览

delphi - 是否有可能获得一个delphi项目来创建一个lib文件作为项目的输出?

我希望它创建 dll 和 LIB。因为这个 dll 静态链接到另一个 CPP dll。所以我必须有lib文件。

我正在使用delphi 4的IDE

0 投票
2 回答
1004 浏览

makefile - configure.in: AM_DISABLE_SHARED 不会改变我的 Makefile

我对使用 Makefiles 和 autoconf 非常陌生。我正在使用 Camellia 图像库并尝试将我的代码与他们的库静态链接。当我在 Camellia 图像库上运行“make”时,我在 /usr/local/lib 目录中获得了 libCamellia.a、.so、.la 和 .so.0.0.0 文件。这是我用来用他们的库编译我的代码的命令:

这很好用,但是当我尝试静态链接时,这就是我得到的:

我想静态链接,因为我正在尝试修改 Camellia 源代码,并且我想将我的版本与他们的版本进行比较。因此,经过一番谷歌搜索后,我尝试将 AM_DISABLE_SHARED 添加到 configure.in 文件中。但是在运行 ./configure 之后,我仍然得到完全相同的 Makefile。在我“进行安装”之后,我仍然得到与上面相同的结果。

获得两个版本的代码的简单方法是什么,一个带有原始 Camellia 源代码编译,一个带有我的修改版本?我认为静态库应该可以工作。有一种简单的方法可以让静态库正常工作,还是有其他简单的解决方案可以解决我的问题?每次我想将我的版本与原始版本进行比较时,我只是不想重新“制作”和重新“制作安装”。

0 投票
2 回答
1368 浏览

autotools - 如何编译具有静态链接依赖项的 autotools 项目?

我想使用一个开源库。由于我想将我的软件作为二进制包传播,我不希望库依赖于其他库,所以我需要静态链接依赖关系。

现在由于库是开源的并且没有提供二进制文件,我自己编译它。该库使用自动工具,我没有找到任何关于如何静态链接依赖项的有用文档。我所做的尝试是使用 --enable-static 调用配置脚本,但这显然只告诉 configure 编译库的静态版本 - 但我需要的是一个包含它所依赖的所有库的动态库。

因此,我需要一种方法来告诉 configure 静态链接依赖项,或者一种方法来对构建的库进行后处理以包含所有依赖项。谁能告诉我该怎么做?

哦,如果重要的话:我使用的是 64 位 Snow Leopard。

0 投票
1 回答
102 浏览

objective-c - 我的框架将利用其他框架,但我希望这对最终用户是透明的

我正在构建一个框架,旨在为用户提供一个新的开发环境,但我需要使用 RegexKit 之类的东西,几乎可以肯定的是其他一些已建立的框架才能做到这一点。出于维护原因,从此类框架中公开的任何功能都将通过我自己的框架中的类和方法进行抽象(允许我改变对我想要的依赖项的想法)。

在理想的世界中,我只想发布一个 .framework。但是我知道,与标准包和应用程序不同,在框架包中嵌入框架是不可能的。除了告诉最终用户他们还必须安装 RegexKit 和任何其他依赖项之外,我还有其他选择吗?我有一种感觉,这降低了我设想构建的易于使用的嵌入式框架的吸引力。

现在我觉得我有一些有限的选择:

  1. 强制用户安装依赖项。
  2. 编写我自己的类来提供相同的功能——啊!
  3. 如果可能的话,尝试静态链接第三方框架(这可能吗??)

理想情况下,我的最终产品是使用 @rpath 的单个 .framework 包,因此可以安装在系统中或简单地与使用它的应用程序捆绑在一起。

0 投票
1 回答
5350 浏览

c++ - 与 Visual Studio 2010 的静态 libpng 链接

我正在尝试向我的应用程序添加 PNG 支持,因此我想包含 libpng。我知道它需要 zlib,因此我也下载了它。我进入 png 文件夹/projects/vstudio 并打开了解决方案。我编译了它,它运行得很好。我将其中的一些标头添加到我的应用程序中,并复制了 lib 文件。我的程序是一个用 c++ 编写的 dll,后来在 C# 中使用。当我在 C# 中运行它时,它抱怨找不到我的 dll(如果我删除 png 部分它工作正常,这很难)。我以前遇到过这个问题,这通常意味着 dll 依赖是错误的。
现在... libpng 编译了一些 .lib 文件和一些 .dll 文件。dll文件更大。我唯一的猜测是它也需要 dll 文件,但我看到人们可以在没有 dll 的情况下链接到 libpng。
所以我的问题是:如何将 libpng(和该实例的 zlib)编译成静态库,如何将它们包含在我的项目中?我在互联网上搜索过,找不到任何有用的东西。

0 投票
2 回答
498 浏览

c++ - 针对库的静态链接实际上是做什么的?

假设我有一个名为的库libfoo,其中包含一个类、一些静态变量、可能带有“C”链接的东西以及一些其他函数。

现在我有一个如下所示的主程序:

当我编译和链接这个时,我链接到libfoo.

这会有什么影响吗?我的可执行文件的大小会增加吗?如果是这样,为什么?静态变量或其地址是否被复制到我的可执行文件中?

抱歉,如果有类似的问题,或者我在任何方面都特别愚蠢。

0 投票
1 回答
545 浏览

iphone - 将静态库附加到 iphone/ipad 应用程序

将静态库包含到 iPhone 或 iPad 应用程序中的最佳方法是什么?

我可以选择

  • 编译提供正确平台的库并使用实用程序构建库文件,ar然后将其作为框架添加到项目中
  • 包括库 .c/.h 的源代码并将它们与应用程序一起编译

第一种方法似乎更简单,因为我不关心管理我想要包含的库的所有特定设置,但是如何为 iPhone 和 iPad 创建库并允许 xcode 在链接时使用正确的库?

第二种方法似乎更复杂,因为 xcode 将负责编译我的应用程序和库(我想使用不同的设置)那么我应该怎么做?我可以轻松地添加 lib 的源代码,但我必须包含 make 脚本以允许 xcode 使用它们以正确的方式构建。

关于如何进行的任何建议?我要包含的库是libssh。(我知道这个库,当然已经在 iPhone 上编译并成功尝试过了)

提前致谢。

0 投票
2 回答
9737 浏览

static - 如何强制使用静态库而不是共享?

在我的 SConscript 我有以下行:

如何让 scons 使用 mylib.a 而不是 mylib.so,同时与其他库动态链接?

编辑:希望尽可能少地使用特定于平台的黑客。

0 投票
3 回答
232 浏览

c++ - 静态链接库不在内部运行代码来设置静态变量

在我正在处理的一个 c++ 项目中,我有一个简单的 c++ 文件,它需要在程序执行开始时运行一些代码。该文件链接到一个静态库,然后链接到主程序。

我在其他运行良好的文件中有类似的代码,看起来像:

但是,除非我使用此文件中实现的函数,否则它在此文件中不起作用。如果库被编译为共享库,它确实有效。我更喜欢静态链接它,因为库只是一种方便,因为文件位于不同的目录中。

更新(解决方案):

现在创建共享库而不是静态库可以使一切正常。稍后我将研究如何让所有东西都与静态库链接。感谢大家的帮助!

0 投票
1 回答
60 浏览

c++ - 对库的可执行依赖

共享可执行文件时,我真的需要担心用于制作该可执行文件的库吗?似乎在生成 exe 时应该考虑到这一点,而不是在必须运行它时。只是好奇。我很确定我不必担心,但想问这个问题以确保。安全总比后悔好。