问题标签 [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.
c++ - 何时使用动态库与静态库
在 C++ 中创建类库时,您可以在动态 ( .dll
, .so
) 和静态 ( .lib
, .a
) 库之间进行选择。它们之间有什么区别,什么时候适合使用?
c++ - 如何静态链接现有的 linux 可执行文件?
寻找一种将动态链接的可执行文件转换为静态可执行文件的方法。似乎应该是可能的,但是手册页变短了,谷歌也没有帮助。
c# - “静态链接”和“动态链接”是什么意思?
我经常听到术语“静态链接”和“动态链接”,通常是指用C、C++或C#编写的代码。它们是什么,它们到底在说什么,它们在连接什么?
static-libraries - 库的大小和可执行文件
我有一个在 Windows 上使用 MSVC 创建的静态库 *.lib。库的大小是 70KB。然后我有一个链接这个库的应用程序。但现在最终可执行文件 (*.exe) 的大小为 29KB,小于库。我想知道的是:
由于库是静态链接的,我在想它应该直接添加到可执行文件大小,最终的 exe 大小应该比这更多吗?windows exe格式是否也会对二进制数据进行一些压缩?
linux 系统的情况如何,即 linux 上的库大小(*.a/*.la 文件)与 linux 可执行文件(*.out)的大小有什么关系?
-广告
iphone - iPhone 设备上的静态库
我有两个项目,一个 Cocoa iPhone 应用程序和一个它使用的静态库。
我已经在 iPhone 模拟器上成功测试了它,但是当我尝试将它部署到我的 iPhone 设备时,我得到(未找到符号)链接错误。
如果我删除库的依赖项,则项目构建/运行良好。
我确保所有构建设置都设置为 iPhoneOS 而不是模拟器。
我确定它很简单,但是有没有人在从 iPhone 模拟器转移到设备时遇到过类似的问题?
--编辑:我已经成功地创建了新项目(一个用于应用程序,一个用于静态库),并成功地让它们在 iPhone 或模拟器上运行。但我有一个非常奇怪的问题......对于每个特定的项目,我无法让它同时适用于设备和模拟器......我已经仔细检查了构建设置,确保引用的库是用于匹配的构建设置(我相信),但我无法解决这些链接错误。
我想我一定是做错了什么……所有的苹果文档都说“超级简单——一键”,但这给我带来了很多问题。
这可能与 xCode 构建设置有关,但我似乎无法理解为什么选择不同的构建平台和重建库不起作用。
c++ - 如何静态链接.DLL?
我们有一个由 VS 构建的(纯原生 C++).DLL。作为客户端,我们有一些本地 C++ 应用程序和一个围绕这个用 C++/CLI 编写的 DLL 的 .Net-Wrapper。最后,还有一些用 C# 编写的 .Net-Wrapper 客户端应用程序。
我的问题是 native.dll 必须以不同于 .Net 世界的方式分发,并且 VS 不会跟踪该 DLL。因此,为了让我的所有 C# 应用程序正常工作,我必须将其复制到每个可执行目录或将其放在 %PATH% 中的某个位置(我会避免在开发人员计算机上这样做,因为他们可能希望使用不同版本的 DLL 启动不同的应用程序)。如果有引用 Wrapper-DLL 的 UserControl 会出现更大的问题:您必须将 DLL 复制到 VS 的目录或再次复制到 %PATH%。但最坏的情况发生在我们的翻译工具上。该工具跟踪 .Net-Assemblies 并将它们打包到可以发送给外部翻译器的翻译器包中。据我所知,没有办法将本机 .DLL 放入该包中!
因此,我计划将本机 DLL 静态链接到 .Net-Wrapper 中,这将解决我的问题。但是对于我们的本机应用程序,这个本机 DLL 必须仍然是一个 DLL。
所以我有两个选择:
- 制作两个项目(一个生成静态库;一个创建动态库=>我尽量避免这种情况)
- 找到静态链接 DLL 的解决方案
- 找到一种方法让 VS 从一个项目中生成两个输出
iphone - 从 iPhone/CocoaTouch 库中链接库的正确方法
我正在为 iPhone 编写一个静态库,我想知道我正在做的事情是否值得推荐,或者我是否应该采取不同的方法。
我正在编写的静态库依赖于 libxml2。libxml2 有一个动态库(dylib)和一个静态库(a)。我尝试了两种方法。
方法一 - 当我尝试通过将“-lxml2”添加到“其他链接器标志”来链接静态库时,构建失败并显示以下消息:
方法二 - 我可以从我的静态库中成功链接到动态库,但我不确定这在 iPhone 上是否允许(或正确的方法)。即使我正在构建一个静态库,Apple 是否允许链接到动态库的静态库?我仍在学习静态库,但据我了解,dylib 中的代码将与我的代码组合成一个库,因此链接到 dylib 应该不是问题。
总结一下:
- mylibrary.a -> libxml2.a [不起作用]
- mylibrary.a -> libxml2.dylib [构建,但这是正确且可接受的吗?]
c - 组合静态库
假设我有三个C静态库,说libColor.a取决于 *libRGB.*a ,而后者又取决于libPixel.a。据说库libColor.a依赖于库libRGB.a,因为在 libColor.a 中有一些对libRGB.a中定义的一些符号的引用。如何将上述所有库组合成一个独立的新libNewColor.a?
独立意味着新库应该定义所有符号。因此,在链接时,我只需要提供-lNewColor。新库的大小应该是最小的,即它不应该包含libColor.a等未使用的 libRGB.a 中的任何符号。我在ar命令中使用了各种选项(用于创建和更新静态库/档案) )。
haskell - 制作小型haskell可执行文件?
有什么好方法可以制作小型的 haskell 可执行文件吗?使用 ghc6,一个简单的 hello world 程序似乎达到了大约 370kB(剥离前为 523kB)。C 中的 Hello world 大约为 4kB(剥离前为 9kB)。
c++ - 为什么静态链接时需要 *.obj 文件?
我不确定这是为什么。我正在跨多个项目分发一个静态 *.lib,但这个静态库会生成许多 *.obj 文件。似乎我还需要使用 *.lib 分发那些 *.obj 文件。否则,我会收到此错误:
为什么是这样?有没有办法在 *.lib 的 *.obj 文件中包含数据?也许编译器中的开关?
这是我对静态库的配置:
C/C++
图书管理员
这是我使用静态库的项目配置:
C/C++
链接器