我在这个问题上尝试了这种方法,但似乎linux版本ar与mac版本不同,因为我无法再次组合目标文件.
我基本上想要做的是通过运行脚本构建阶段将另一个静态库合并到我的Xcode静态库构建产品中.
不幸的是我无法将其他库直接编译到我的项目中,因为它有自己的构建系统(因此我使用已编译的库).
我认为应该可以将其他库合并ar到Xcode生成的库中而不反编译构建产品.我该如何做到这一点?
我有一个非常类似于cmake邮件列表中描述的问题,我们有一个依赖于许多静态库的项目(所有静态库都是从各个子模块中的源代码构建的,每个子模块都有自己的CMakeLists.txt描述每个库的构建过程)我想组合成一个静态库,以便向消费者发布.我的库的依赖性可能会发生变化,我不想让开发人员在这些变化的后面进一步负担.简洁的解决方案是将所有lib捆绑到一个单独的lib中.
有趣的是,target_link_libraries在设置目标mylib和使用它时,该命令不会结合所有静态..
target_link_libraries(mylib a b c d)
Run Code Online (Sandbox Code Playgroud)
但是,奇怪的是,如果我将mylib项目作为可执行项目的子模块,并且只mylib在顶级可执行文件CMAkeLists.txt中链接,那么该库似乎确实是组合在一起的.即,当我将目标设置为仅构建时,mylib为27 MB,而不是3 MB mylib.
有一些解决方案描述了将lib解压缩到目标文件并重新组合(这里和这里),但是当CMake看起来完全能够自动合并lib时,这似乎非常笨拙,如上例所述.它有一个我失踪的神奇命令,或推荐的优雅方式制作发布库?
假设我有三个C静态库,比如libColor.a,它依赖于*libRGB.*a,而后者依赖于libPixel.a.据说库libColor.a依赖于库libRGB.a,因为libColor.a中有一些对libRGB.a中定义的符号的引用.如何将所有上述库组合到一个独立的新libNewColor.a中?
独立意味着新库应该定义所有符号.所以在链接时我只需要给出-lNewColor.新库的大小应该是最小的,即它不应该包含libRGB.a中的任何符号,libColor.a等不使用它.我在ar命令中使用了各种选项来试运气(用于创建和更新静态库/档案) ).
我有一个两个静态库a.lib和b.lib(C语言),它是使用VC6(Visual Studio 6.0)生成的.
我想将这两个库合并到一个静态库中c.lib.如何在CLI模式下执行此操作?
我正在尝试使用 scons 将静态库 [1] 链接到另一个静态库 [2]。
不幸的是,发出的对“ar”的调用从不包含任何到库 [1] 的路径。
根据这篇文章如何将两个“ar”静态库合并为一个,应该可以将档案合并为一个。
在这里通常调用 CheckLibWithHeader 是不够的吗?
此致
我有一个名为 testlib.pro(使用 Qtcreator)的 C++ 项目,它将创建一个静态库 libtest.a。
该项目还包括 staticlib.a (示例)和 staticlib1.aie 使用其他静态库即时创建一个静态库。创建静态库后,我创建了 C 包装器(testApi.c)以使用使用静态库的 C++ 代码。我正在使用以下选项编译 testApi.c
gcc -o demo testApi.c -L ./testlib -ltest
但是它给出了链接器错误,统计它需要我用来链接 libtest.a 的静态库。所以我用下面的注释重新编译程序,它工作正常
gcc -o demo testApi.c -L ./testlib -ltest -lstatuclib -lstaticlib1
我的理解是,如果我将 libtest.a 运送到另一台机器并尝试编译 testApi.c 文件,则该机器可能需要 staticlib.a 和 staticlib1.a 。但我只想使用新创建的静态库 libtest.a。我错过了吗?
注意:我在 testlib.pro 中使用 -l 选项包含了 staticlib.a、staticlib1.a
c ×5
c++ ×2
cmake ×1
gcc ×1
linux ×1
makefile ×1
merge ×1
objective-c ×1
qt-creator ×1
scons ×1
unix-ar ×1
visual-c++ ×1
xcode ×1