标签: static-libraries

静态库的内容

我说有一个静态库mystaticlib.a.我想查看其内容,例如其中的目标文件数.

我怎么能在gcc上这样做?

c c++ gcc static-libraries object-files

44
推荐指数
3
解决办法
5万
查看次数

CMAKE - 如何正确地将静态库的头文件复制到/ usr/include中?

我正在使用C进入CMAKE,实际上我正在创建两个非常小的静态库.

我的目标是:

  1. 这些库被编译并链接到*.a文件中.[这个作品]
  2. 然后我希望将*.a文件复制到/ usr/local/lib [这也是工作]
  3. 据我所知,库(很少),它们是使用链接-lnameoflib,这是一个编译器标志.好.我准备好了我的CMakeLists.txt,它实际上将*.a文件复制到/ usr/local/lib中.但是,为了能够在程序中使用它们,我还需要将它们的头文件复制到/ usr/include中,然后我可以轻松地将它们包含在内/usr/local/lib.这就是我现在理解的方式.

我的问题是 - 如何使用CMAKE将头文件复制到/ usr/include文件夹中的正确方法是什么?我想在/usr/local/include执行时自动复制它们,比如*.a文件.

对于这两个库,我有一个熟悉的CMakeLists.txt:

project(programming-network)

add_library(programming-network STATIC
    send_string.c
    recv_line.c
    )

INSTALL(TARGETS programming-network
        DESTINATION "lib"
        )
Run Code Online (Sandbox Code Playgroud)

c cmake static-libraries

44
推荐指数
4
解决办法
4万
查看次数

如何将-fvisibility选项应用于静态库中的符号?

我有一个共享库项目,它由4个静态库(.a)和一个object(.o)文件构成.我正在尝试添加-fvisibility=hidden选项以将输出中的符号限制为仅使用__attribute__在源中标记的符号.

我已经-fvisibility=hidden.so项目的编译选项(包括.o文件)和项目添加了选项.a.

目标文件中的符号将按照预期从最终中删除.so.但是,.a项目中的符号仍然在最终.so文件中.将-fvisibility=hidden选项添加到.solink命令无效.

我究竟做错了什么?

我的目的是从.so除了接口函数之外的所有符号中删除库.

编辑:我实际上使用版本地图来解决这个问题.但是,随着外部符号的更改,它需要继续维护版本脚本.接受的答案有更好的主意.

gcc visibility static-libraries

43
推荐指数
3
解决办法
3万
查看次数

OpenCV作为静态库(cmake选项)

我想在嵌入式系统中使用OpenCV库,我需要使用OpenCV作为静态库来编译我的项目.

如何使用cmake选项创建库?

opencv cmake static-libraries

43
推荐指数
1
解决办法
4万
查看次数

Xcode自定义构建配置导致静态库"找不到库/文件"

我有一个工作区,其中包含一个项目,该项目链接到另一个项目中的静态库(也在工作区中).这是Kobold2D中的一个问题我无法解决,即使我理解原因,我想它与这个问题类似.

项目目标和静态库目标都具有DebugRelease构建配置.一切都很好.

现在,有人在项目中添加了新的构建配置,并将其命名为Ad-Hoc.现在,项目的目标构建了Ad-Hoc配置,但是静态库没有这样的配置.显然,他们默认构建Release配置.

最后,当链接器应该将所有内容组合在一起时,它会失败:

ld: library not found for -lbox2d-ios
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/clang++ failed with exit code 1
Run Code Online (Sandbox Code Playgroud)

对于通过-force_load $(BUILT_PRODUCTS_DIR)/libSomeLib.a错误强行加载的库类似但是说"找不到文件".我应该注意,库"libbox2d-ios.a"位于"带库的链接二进制"构建阶段列表中.

显然问题是链接器假设这些库位于BUILT_PRODUCTS_DIR中的Ad-Hoc-iphoneos文件夹中,而它们实际上位于Release-iphoneos文件夹中,因为它们没有Ad-Hoc构建配置.

我怎么能把连接器打到脸上并告诉他把它们放在哪里呢?最好是我正在寻找适用于这两种情况的解决方案,即库添加标准方式(链接二进制文件库构建阶段)和需要额外-force_load才能工作的库.

我希望有一些方法可以:

  • 强制库放在应用程序目标的构建配置文件夹中
  • 运行一个后编译和预链接脚本,将每个库复制到构建配置文件夹
  • 指定库的相对路径
  • 使用$ BUILT_PRODUCTS_DIR以外的其他宏来执行-force_load
  • 像-WTFmake-all-problems-go-away这样的链接器标志

对不起,但我不得不这样说...... ARGH!:)

linker build static-libraries xcode4

43
推荐指数
5
解决办法
1万
查看次数

如何构建Objective-C静态库?

我有一些Objective-C类,我目前在Cocoa应用程序(Mac OS X)和Cocoa-Touch应用程序(iOS)中都使用它.目前,当我更新这些类时,我必须将更新的文件.h.m文件复制到这两个项目中.没那么大的交易,但我将在更多的项目中使用它们.

所以,我想将这些类构建到Objective-C静态库中.然后在所有其他项目中链接该库.

有没有办法构建一个静态库,以便它适用于Cocoa和可可触摸应用程序?

我试过用这些类构建一个Cocoa静态库,但是当我尝试在我的Cocoa应用程序中链接该库时,我遇到了各种错误,我确信它们来自我没有这样做的事实对.

那么,我如何以正确的方式构建Objective-C静态库?我是否必须构建Cocoa-Touch和Cocoa静态库?或者我可以做一个吗?这是怎么做到的?

有没有关于这个主题的完善的教程?

我在网上搜索过,似乎无法找到关于这个主题的综合教程,所以我在这里提出了一个问题,希望能够发布一个很好的答案,这个问题可以作为我和未来提问者的资源.

cocoa cocoa-touch objective-c static-libraries

42
推荐指数
3
解决办法
2万
查看次数

错误:"文件是为归档而构建的,而不是被链接的架构(armv7s)"

我已经构建了自己的静态C++库,它使用以下设置构建:

  • 架构:armv7,armv7s
  • 仅构建活动架构:否
  • 支持平台:iOS
  • 有效的架构:armv7,armv7s

库项目构建良好,我得到.a文件(我已经清理了构建文件夹并再次构建项目以确保我的设置有效).

我已将库(.a文件)添加到我的iOS项目中,但即使我在iOS项目中设置了完全相同的设置,项目也无法构建:

  • 架构:armv7s,armv7
  • 仅构建活动架构:是的
  • 支持平台:iOS
  • 有效的架构:armv7,armv7s

我一直收到这个错误:

LD:警告:忽略文件 /Users/hidden/Library/Developer/Xcode/DerivedData/HelloWorldCppLib-fomvvtklwijvqicyhahxleiscein/Build/Products/Debug-iphoneos/libHelloWorldCppLib.a,文件归档建这不是架构被链接(armv7s) : /Users/hidden/Library/Developer/Xcode/DerivedData/HelloWorldCppLib-fomvvtklwijvqicyhahxleiscein/Build/Products/Debug-iphoneos/libHelloWorldCppLib.a

我错过了什么?它告诉我.a文件不是为armv7s构建的,但这正是我用库构建的设置.

xcode static-libraries armv7 ios

42
推荐指数
4
解决办法
3万
查看次数

ld链接器问题:--whole-archive选项

--whole-archive我见过的唯一真正使用的链接器选项是从静态库创建共享库.最近我遇到了Makefile(s),它在链接内部静态库时总是使用这个选项.这当然会导致可执行文件不必要地引入未引用的目标代码.我对此的反应是,这是完全错误的,我在这里遗漏了什么吗?

我的第二个问题与我读到的有关整个存档选项的内容有关,但无法完全解析.--whole-archive如果可执行文件还链接到共享库,而该共享库又(部分地)具有与静态库相同的目标代码,则在与静态库链接时应该使用该 选项.这是共享库,静态库在目标代码方面有重叠.使用此选项将强制在可执行文件中解析所有符号(无论使用情况).这应该避免目标代码重复.这是令人困惑的,如果一个符号在程序中被引用,它必须在链接时唯一地解决,这个关于复制的业务是什么?(如果这一段不是清晰的缩影,请原谅我)

谢谢

linker build-process static-libraries

41
推荐指数
4
解决办法
5万
查看次数

iPhone静态库中的核心数据

我已经构建了一个静态库,它大量使用了Core Data框架.我可以在我的外部项目中成功使用该库,但仅限于我在主项目中包含.xcdatamodel文件.这不太理想,因为库的要点是尽可能隐藏实现细节.

在一个单独的问题中,我被告知我无法将资源与库捆绑在一起(这对我来说完全合情合理).

那么有没有办法以编程方式允许模型被"发现",而不必将模型包含在主项目中?

iphone core-data static-libraries nsbundle

41
推荐指数
2
解决办法
2万
查看次数

Xcode 4中的静态库

(之前我的问题已在此处提出,但我没有找到合适的答案.例如Xcode4 Workspace with Static library project&application project)

我正在尝试使用第三方提供的库.它们提供了构建libLibraryName.a文件的XCode项目.他们建议将项目作为子项目添加到我自己的项目中,然后将产品libLibraryName.a文件添加到我的项目设置"Link Binary with Libraries"中描述的库集.

库正确构建:生成.a文件.但该项目在Products组下显示了一个红色的libLibraryName.a文件.我不能让它变成黑色.父项目说它无法找到LibraryName进行链接.

作为测试,我使用XCode 4静态库模板创建了一个新的静态库项目.该项目表现出相同的行为 - 即使构建了.a文件,产品也不会显示"黑色".(编辑:如果你为设备而不是模拟器构建它会变黑).

我知道XCode 4默认将中间和产品文件放在共享位置.我尝试过这个设置,并且我已经更改了设置,将产品文件放在构建设置中描述的文件夹中.两种设置都不起作用.

人们还建议为设备而不是模拟器构建.我试过这个无济于事.

是什么赋予了?如何获取静态库项目以识别其构建产品的位置,并随后在另一个项目中引用此产品?

static-libraries ios xcode4 xcode3to4

41
推荐指数
2
解决办法
4万
查看次数