问题标签 [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 投票
3 回答
8356 浏览

c# - 为什么 C# 没有 C++ 风格的静态库?

最近我一直在研究一些共享一些通用代码的小型 .NET 应用程序。该代码引入了一些接口来抽象出单元测试的I/O调用。

我希望应用程序是独立的 EXE,没有外部依赖项。这似乎是静态库的完美用例。想想看,第三方控制供应商也可以从这种模式中受益。

我错过了静态库的一些隐藏的讨厌吗?

C# 设计者有什么理由将它们排除在外吗?

编辑:我知道 ILMerge,但它没有提供与静态库相同的便利。

0 投票
3 回答
8014 浏览

gcc - 在 Windows 中静态链接 GTK+ 库

我已经安装了 GCC 和 GTK+。它工作正常,但我需要将 GTK+ 库与我的应用程序(它是一个小应用程序)静态链接,以便只存在一个“.exe”。

0 投票
1 回答
3852 浏览

c++ - 链接器在同一目录中找不到静态库

我正在将一些 Visual Studio 2008/VC9 的东西移植到 Code::Blocks/MinGW 并且由于某种原因,链接器无法从工作区中的另一个项目中找到静态库。

在 Visual Studio 2008 中,我可以将静态库项目设置为依赖项,它会以正确的顺序构建(即需要在链接其他项目之前构建静态库),并为配置链接正确的库。

我在 Code::Blocks 中找不到这样的选项,所以我确保首先显式构建静态库(libcommon.a),然后在另一个项目的“构建选项”下在“链接器”中添加“libcommon.a”设置”。.a 文件与项目文件位于同一目录中,但是我仍然从其他项目的链接器中收到错误消息,说他们找不到它...

ld.exe 找不到 -lcommon

我在做什么所以它找不到库,即使它就在项目文件旁边?

还有更好的方法来模拟单个解决方案/工作区中的 Visual Studio 依赖项吗?

0 投票
1 回答
2332 浏览

c++ - xerces-c++ compile/linking question

After installing Xerces-C++ (XML library):

And writing the simple program (xmlval.cpp):

And compiling:

The compile result is a bunch of lines like:

Any thoughts on this?

0 投票
2 回答
8596 浏览

iphone - 在 Xcode 静态库中包含框架?

简而言之:

有没有办法在 Xcode 中创建一个静态库,这样当客户端与该库链接时,它们也与该库所依赖的框架链接?

问题:

我们有一个共享的 Xcode 项目,其中包含多个包含我们所有公共代码的静态库目标。例如,如果一个项目想要使用共享网络代码,他们所要做的就是链接到我们的网络库中。

问题是这些库似乎没有“包含”它们所依赖的框架。

例如,我们的声音库使用 AudioToolkit.framework。即使 Sound 库在其链接库的列表中包含 AudioToolbox.framework,如果客户端不直接与 AudioToolkit.framework 链接,客户端在与 Sound 链接时也会出现链接器错误。

这是一个维护麻烦,因为每次库的框架依赖关系发生变化时,我们都必须手动更改所有依赖项目中的链接框架列表。

这应该工作吗?有没有更好的办法?

谢谢!

0 投票
2 回答
4527 浏览

c++ - wxWidgets 中的静态库链接是静态的,但是使用我的 lib 的应用程序仍然需要 wxwidgets

希望有人可以在这里帮助我。我正在使用 Visual Studio 2005 并创建一个静态链接到 wxWidgets 的静态库。我有:

  1. 根据他们的指南静态编译 wxWidgets
  2. 在我的“附加库目录”属性中包含 lib 目录
  3. 在我的“附加依赖项”属性中添加了所有wxWidget 库
  4. 将我的“链接库依赖项”属性设置为“是”
  5. 将 C++ 优化设置为禁用。

我知道其中一些步骤不应该执行,我这样做是出于“以防万一”的理性。

虽然我的库编译顺利,但包含我的静态库的测试应用程序在链接期间抱怨它找不到'wxbase28.lib'(我包括在内)。

我应该注意到我完全抽象出 wxWidgets,所以库的公共 API 没有提及任何与 wxWidget 相关的内容。测试应用程序不应该知道 wxWidgets 存在。

我的小库已经增长到超过 51 MB,所以我感觉这些库正在链接中......那么为什么我的测试应用程序抱怨它找不到 wxWidgets 库?

谢谢

0 投票
1 回答
745 浏览

iphone - MonoTouch 和 iPhone 静态库

MonoTouch 是否允许创建 iPhone 静态库?如果是的话怎么做?

0 投票
1 回答
2459 浏览

static-libraries - 是否可以使用 libtool 静态链接一些(但不是全部)库?

我正在开发一个使用 autoconf、automake 和 libtool 构建的项目。该项目以二进制和源代码形式分发。

在 Linux 上,默认情况下,构建脚本会动态链接到所有库。这是有道理的,因为 Linux 用户可以依靠其发行版的包管理器来处理依赖关系。

在 Windows 上,默认情况下,构建脚本使用 libtool 的-all-static选项静态链接到所有库。这是有道理的,因为 Windows 没有提供任何依赖项,并且能够分发包含所有依赖项的单个二进制文件而不是为分发大量 DLL 而烦恼是有帮助的。

在 OSX 上,一些依赖项由 OS 提供,而另一些则不提供。因此,动态链接到操作系统提供的库和静态链接到其他库会很有帮助。不幸的是,libtool 的全有或全无-all-static选项在这里没有帮助。

有没有一种好方法可以让 libtool 静态链接到一些库,但不是全部?

注意:我意识到我可以仔细编译依赖项,以便只有静态构建可用。但是,我希望我的项目的构建系统在依赖项的静态动态构建可用的常见情况下是健壮的。

注意:当然,我并不关心像 C/C++ 运行时库这样的低级依赖关系,它们总是在上述所有三个平台上动态链接。

0 投票
1 回答
3532 浏览

c++ - VS2005中如何将静态库项目转为dll项目

当我在 vs2005 中创建一个项目时。我也可以创建 Win32->Win32Project。我可以选择“控制台应用程序”或“dll”或“静态库”

如果我创建了一个静态库项目。如何将其转换为 dll 项目。我在创建项目的设置面板中找到。常规->配置类型,我可以将静态库(.lib)切换到 DLL 但是,在此设置之后。我确实得到了一个dll。但我没有一个库。我不能在其他项目中使用它。如何在VS2005中将静态库项目转换为dll项目非常感谢!

0 投票
3 回答
3920 浏览

shared-libraries - 共享库与静态库的加载时间

我有一个关于共享库与静态库加载时间的问题。

假设我有一个使用 liba、libb、libc 的可执行文件 foo.exe。同样在给定时间,机器上运行的可执行文件实例超过 10 个。

现在,如果上述 3 个库是共享库:第一个实例被加载到 RAM 中:所用时间将是 foo.exe 的 main() 加载内存所用的时间(假设它可以忽略不计)+ 加载 liba 的时间 + 加载时间libb + time to load libc 2nd instance is started : 现在假设这个可执行文件的第二个实例正在运行。由于所有库都已加载到主内存中,因此仅将 main() 加载到内存中所花费的时间可以忽略不计。

现在,如果上述 3 个库是静态库:第一个实例被加载到 RAM 中:所花费的时间将是 foo.exe 的 main() 加载内存所花费的时间(假设它可以忽略不计)+ 加载 liba 的时间 + 加载时间libb + 加载 libc 的时间(当然,它现在是整个可执行文件的所有部分)第二个实例已启动:现在假设该可执行文件的第二个实例正在运行。所用时间将再次是 foo.exe 的 main() 加载内存所用的时间(假设它可以忽略不计)+ 加载 liba 的时间 + 加载 libb 的时间 + 加载 libc 的时间。(因为每个可执行文件都不能共享库,因为它们是静态库)

所以我的结论是,使用静态库加载时间会更长。但有人告诉我,共享库在加载过程中比静态库需要更多时间,所以会有延迟,所以共享库不是一个好的选择。这怎么可能 ?