Questions tagged «static-linking»

5
是否有修改后的LGPL许可证允许静态链接?
LGPL要求,如果程序使用LGPL版本的库,则用户必须能够将程序与库的其他版本重新链接: ... d)执行以下一项操作: 0)根据本许可条款和相应的应用程序代码,以适合用户并在允许用户重新组合或重新链接应用程序与链接版本的修改版本的方式下传达最小应用程序源,以产生按照GNU GPL第6节指定的方式传送相应的源代码,修改组合工作。 1)使用合适的共享库机制与库链接。一种合适的机制是(a)在运行时使用用户计算机系统上已经存在的库的副本,并且(b)在与链接版本接口兼容的库的修改版本下正常运行。 ... 但是,在某些情况下,这可能会带来很大的困难。特别是,Haskell程序几乎总是静态编译的。而且,编译器会进行跨模块优化,因此不可能取出一部分代码并用另一部分代码代替。因此,很难满足此条件。(请参阅Haskell Wiki上的此链接。) 动态链接将是一个解决方案,但是在许多情况下,这是不可能的。例如: 某些平台可能根本没有动态链接。 某些语言无法进行动态链接。或者,不可能使模块成为多平台。 在某些情况下,动态链接会阻止重要的优化。虽然我说这很少是一个严重的问题,但是在像Haskell这样的语言中,性能损失可能是相当大的。 因此,我正在寻找一种标准的类似LGPL的许可证,该许可证不需要重新链接(并且我知道这样做会给用户带来一些自由)。一些项目使用他们自己的LGPL修改,例如wxWidgets。但是,我宁愿使用一些更正式的标准许可证,也许已由某些法律专家检查过,并且与(L)GPL兼容。有这样的东西吗? (我也想知道这种LGPL修改是否会带来一些不可预见的后果。)

2
是否可以嵌套静态库依赖项?
我在QT工作。 静态库可以依赖于另一个静态库吗?(静态Lib是通过链接另一个静态库创建的) 如果是,在链接到lib2之后,生成的lib(lib1)是否可能不包含lib2的所有代码吗? 在我的Qt项目中,我使用的是静态库,该库依赖于多个库。尽管我的代码中只需要一个库(以及该类的一个.h),但我必须添加所有库(及其项目中的所有标头)。 请说明情况。
12 c++  qt  static-linking 

2
为什么Apple只允许iOS上使用静态框架?
显然,Apple可以为iOS创建动态加载的库(称为框架),因为它们带有XCode(例如UIKit)。应用开发人员只能创建静态库,或者充其量只能诱使Xcode在实际加载静态库时认为它正在加载框架,这被称为创建假框架,某些拖放方便,但没有任何动态加载优势。 Apple拒绝应用程序开发人员使用动态框架的原因是什么?似乎相当容易使用外部库,因为开发人员不必依赖挑剔的链接器标志或开源库依赖链。 我看到一个常见的原因是安全性。那么,为什么Apple允许OSX而不是iOS允许它?那里的安全性不是吗? 编辑:自iOS 8起,这不再相关。Apple已添加对动态框架的支持。

3
混淆C ++应用程序代码重要吗?
在Java世界中,有时似乎是一个问题,但是C ++呢?有不同的解决方案吗? 我在考虑这样一个事实,即有人可以用同一库的不同版本替换特定操作系统的C ++库,但是充满了调试符号以了解我的代码的作用。使用标准库或流行库是一件好事吗? 在Windows下将某些dll库替换为该库的“调试版本”时,也会发生这种情况。首选静态编译更好吗?在商业应用程序中,我看到针对其应用程序的核心,它们静态地编译了所有内容,并且在大多数情况下,dll(通常是动态库)用于提供一些第三方技术,例如反盗版解决方案(我在许多游戏中都看到了这一点) ),GUI库(如Qt),OS库等。 静态编译是否等效于Java世界中的混淆处理?用更好的术语来说,这是保护代码的最佳,最实惠的解决方案吗?

1
提供的目标文件是否满足LGPL relink子句?
从SO的这个问题中,我读到: 专有源代码+ LGPL源代码 静态链接: 您必须将两个零件都作为LGPL发行。 或提供一切使用户可以将应用程序与另一版本的LGPL源代码重新链接的功能。在这种情况下,其他要求与动态链接一样。 因此,就静态地将LGPL库链接到专有代码应用程序而言,听起来确实提供目标文件足以满足LGPL的要求。当可执行文件被静态链接时,提供目标文件可以使最终用户重新编译应用程序,从而链接到库的不同版本。 这是正确的吗?如果不正确,为什么呢?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.