今天我发现我正在处理的编译静态库在Release模式下比在Debug中大得多.我发现它非常令人惊讶,因为大部分时间恰好相反(据我所知).
调试模式下的大小略大于3 MB(这是一个相当大的项目),但在发布时它最多可达到6.5 MB.有人能告诉我这可能是什么原因吗?我正在使用静态库项目的常规Visual Studio(2008)设置,在构建配置设置中几乎没有更改.在发布时,我正在使用/ O2并且"赞成大小或速度"被设置为"不会"./ O2("最大化速度")是否会导致最终的.lib比包含所有调试信息的调试版本大得多?
编辑:
附加信息:
调试:
- 整个程序优化:否
- 启用功能级别链接:否
发布:
- 整个程序优化:启用链接时代码生成
- 启用功能级别链接:是
我正在尝试使用在Linux上运行的CMake构建一个基于OpenCV的项目.到目前为止,我的CMakeLists.txt文件看起来像
FIND_PACKAGE (OpenCV REQUIRED)
...
TARGET_LINK_LIBRARIES (my-executable ${OpenCV_LIBS})
Run Code Online (Sandbox Code Playgroud)
但这导致动态链接库.如何链接静态库?
几天前我创建的静态库(Universal)工作正常Xcode5.0 SDK7.更新Xcode5.1后SDK7.1,如果我选择模拟器不起作用iPhone Retina(4-inch 64-bit).然后我将使用Bellow设置更改来更新我的lib.

我为三个目标做同样的事情: -

对于运动模拟器以及设备我把Universal lib和这个我运行脚本这个: -

在此之后我再次构建lib并使用我之前完成的项目.但仍然遇到同样的问题iPhone Retina(4-inch 64-bit) Undefined symbols for architecture x86_64:
所以,我的问题是,为arm64更新lib需要进行任何其他更改,或者我在上面的步骤中犯了任何错误.如果我错了,请告诉我.
更新我的静态库以进行支持需要进行哪些更改 64Bit architecture
注意:
我要求我自己创建的库更新.我没有使用第三方库. 更新
我lipo -info testingLibImport/libLibNSlog.a在终端中使用了这个命令,输出是:
Architectures in the fat file: testingLibImport/libLibNSlog.a are: armv7 armv7s i386 arm64
Run Code Online (Sandbox Code Playgroud) 问候,
我有一个子项目,它包含了几个库和一个主应用程序.当我在其中一个库中更改某些内容时,主应用程序不会与它们重新链接.当使用QT Creator时,是否有人有一个技巧可以让应用程序自动重新链接其静态链接的库?
-Dan O.
有没有办法在Xcode中创建静态库,以便当客户端链接到该库时,它们还链接到该库所依赖的框架?
我们有一个共享的Xcode项目,它包含多个包含所有常用代码的静态库目标.例如,如果项目想要使用共享网络代码,他们应该做的就是在我们的网络库中链接.
问题是库似乎并没有"包含"它们所依赖的框架.
例如,我们的Sound库使用AudioToolkit.framework.即使Sound库在其列表链接库中包含AudioToolbox.framework,客户端在与Sound链接时也会遇到链接器错误,如果它们也不直接与AudioToolkit.framework链接.
这是一个维护麻烦,因为每次库的框架依赖关系发生变化时,我们都会手动更改所有依赖项目中链接框架的列表.
这应该有用吗?有没有更好的办法?
谢谢!
XCode中的静态库和动态库有什么区别?为什么Apple不允许我们在iOS应用程序中使用动态库?
我有一个静态库,我正在调试模式下构建,但当我进入它时,我仍然得到反汇编.我想知道如何使用nm或其他工具来确保调试符号没有被剥离.
我需要为我的要求制作swift静态库.我制作了swift静态库,它使用swift和Obj-c代码.我通过桥文件包含了Obj-c文件.我能够编译swift静态库而不会出现任何错误,并获取libMySwift.a文件.我使用Xcode9.3和Swift4来编译库.
我在obj-c项目中包含了libMySwift.a,还包含了obj-c兼容的头文件来访问项目中的lib.当我尝试编译项目时,它会给出以下警告和200多个错误.
Auto-Linking library not found for -lswiftSwiftOnoneSupport
Auto-Linking library not found for -lswiftCore
Auto-Linking library not found for -lswiftQuartzCore
Auto-Linking library not found for -lswiftCoreImage
Auto-Linking library not found for -lswiftCoreGraphics
Auto-Linking library not found for -lswiftObjectiveC
Auto-Linking library not found for -lswiftDispatch
Auto-Linking library not found for -lswiftMetal
Auto-Linking library not found for -lswiftFoundation
Auto-Linking library not found for -lswiftUIKit
Auto-Linking library not found for -lswiftDarwin
Auto-Linking library not found for -lswiftCoreFoundation
Run Code Online (Sandbox Code Playgroud)
如果我遗漏任何步骤或需要添加任何内容,请告诉我.
如何创建静态库,并且可以在ios中的任何项目上添加.a文件.
我试过这样做但是做不到.
提前致谢
编辑:
如果你落在这篇文章上,你可能想直接跳到答案
今天早上我发了一篇关于我的困惑的帖子
机器类型(C++ librairies):i386 vs x86_64
但我想我做错了不准确.所以我决定举一个我面对的情况的例子,我无法理解.
步骤1
我在机器A上构建了一个库,一个2岁的mac,OS x 10.7.5(我猜是64位;我的猜测基于你将在下面的附加信息中看到的命令)使用以下文件.
标题SimpleClass.hpp:
#ifndef SIMPLECLASS_HPP
#define SIMPLECLASS_HPP
class SimpleClass
{
public:
SimpleClass();
SimpleClass(const SimpleClass& orig);
virtual ~SimpleClass();
private:
} ;
#endif /* SIMPLECLASS_HPP */
Run Code Online (Sandbox Code Playgroud)
源文件SimpleClass.cpp:
#include "SimpleClass.h"
#include <iostream>
SimpleClass::SimpleClass()
{
std::cout << "A new instance of Simple Class was created" << std::endl;
}
SimpleClass::SimpleClass(const SimpleClass& orig)
{
}
SimpleClass::~SimpleClass()
{
}
Run Code Online (Sandbox Code Playgroud)
我使用创建库
~/cpp_test$ clang++ -c -o SC.o -I SimpleClass.hpp SimpleClass.cpp
~/cpp_test$ ar rcs libtest_sc.a SC.o
Run Code Online (Sandbox Code Playgroud)
机器A的其他信息:
~/cpp_test$ clang++ --version …Run Code Online (Sandbox Code Playgroud) static-libraries ×10
c++ ×4
ios ×4
xcode ×3
iphone ×2
linker ×2
32bit-64bit ×1
arm64 ×1
c ×1
cmake ×1
debug-mode ×1
frameworks ×1
ios4 ×1
ios7 ×1
linux ×1
macos ×1
opencv ×1
qt ×1
qt-creator ×1
release-mode ×1
swift ×1
swift4 ×1
xcode5.1 ×1
xcode9.3 ×1