我说有一个静态库mystaticlib.a.我想查看其内容,例如其中的目标文件数.
我怎么能在gcc上这样做?
我正在使用C进入CMAKE,实际上我正在创建两个非常小的静态库.
我的目标是:
-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) 我有一个共享库项目,它由4个静态库(.a)和一个object(.o)文件构成.我正在尝试添加-fvisibility=hidden选项以将输出中的符号限制为仅使用__attribute__在源中标记的符号.
我已经-fvisibility=hidden为.so项目的编译选项(包括.o文件)和项目添加了选项.a.
目标文件中的符号将按照预期从最终中删除.so.但是,.a项目中的符号仍然在最终.so文件中.将-fvisibility=hidden选项添加到.solink命令无效.
我究竟做错了什么?
我的目的是从.so除了接口函数之外的所有符号中删除库.
编辑:我实际上使用版本地图来解决这个问题.但是,随着外部符号的更改,它需要继续维护版本脚本.接受的答案有更好的主意.
我想在嵌入式系统中使用OpenCV库,我需要使用OpenCV作为静态库来编译我的项目.
如何使用cmake选项创建库?
我有一个工作区,其中包含一个项目,该项目链接到另一个项目中的静态库(也在工作区中).这是Kobold2D中的一个问题我无法解决,即使我理解原因,我想它与这个问题类似.
项目目标和静态库目标都具有Debug和Release构建配置.一切都很好.
现在,有人在项目中添加了新的构建配置,并将其命名为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才能工作的库.
我希望有一些方法可以:
对不起,但我不得不这样说...... ARGH!:)
我有一些Objective-C类,我目前在Cocoa应用程序(Mac OS X)和Cocoa-Touch应用程序(iOS)中都使用它.目前,当我更新这些类时,我必须将更新的文件.h和.m文件复制到这两个项目中.没那么大的交易,但我将在更多的项目中使用它们.
所以,我想将这些类构建到Objective-C静态库中.然后在所有其他项目中链接该库.
有没有办法构建一个静态库,以便它适用于Cocoa和可可触摸应用程序?
我试过用这些类构建一个Cocoa静态库,但是当我尝试在我的Cocoa应用程序中链接该库时,我遇到了各种错误,我确信它们来自我没有这样做的事实对.
那么,我如何以正确的方式构建Objective-C静态库?我是否必须构建Cocoa-Touch和Cocoa静态库?或者我可以做一个吗?这是怎么做到的?
有没有关于这个主题的完善的教程?
我在网上搜索过,似乎无法找到关于这个主题的综合教程,所以我在这里提出了一个问题,希望能够发布一个很好的答案,这个问题可以作为我和未来提问者的资源.
我已经构建了自己的静态C++库,它使用以下设置构建:
库项目构建良好,我得到.a文件(我已经清理了构建文件夹并再次构建项目以确保我的设置有效).
我已将库(.a文件)添加到我的iOS项目中,但即使我在iOS项目中设置了完全相同的设置,项目也无法构建:
我一直收到这个错误:
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构建的,但这正是我用库构建的设置.
--whole-archive我见过的唯一真正使用的链接器选项是从静态库创建共享库.最近我遇到了Makefile(s),它在链接内部静态库时总是使用这个选项.这当然会导致可执行文件不必要地引入未引用的目标代码.我对此的反应是,这是完全错误的,我在这里遗漏了什么吗?
我的第二个问题与我读到的有关整个存档选项的内容有关,但无法完全解析.--whole-archive如果可执行文件还链接到共享库,而该共享库又(部分地)具有与静态库相同的目标代码,则在与静态库链接时应该使用该 选项.这是共享库,静态库在目标代码方面有重叠.使用此选项将强制在可执行文件中解析所有符号(无论使用情况).这应该避免目标代码重复.这是令人困惑的,如果一个符号在程序中被引用,它必须在链接时唯一地解决,这个关于复制的业务是什么?(如果这一段不是清晰的缩影,请原谅我)
谢谢
我已经构建了一个静态库,它大量使用了Core Data框架.我可以在我的外部项目中成功使用该库,但仅限于我在主项目中包含.xcdatamodel文件.这不太理想,因为库的要点是尽可能隐藏实现细节.
在一个单独的问题中,我被告知我无法将资源与库捆绑在一起(这对我来说完全合情合理).
那么有没有办法以编程方式允许模型被"发现",而不必将模型包含在主项目中?
(之前我的问题已在此处提出,但我没有找到合适的答案.例如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 ×10
c ×2
cmake ×2
gcc ×2
ios ×2
linker ×2
xcode4 ×2
armv7 ×1
build ×1
c++ ×1
cocoa ×1
cocoa-touch ×1
core-data ×1
iphone ×1
nsbundle ×1
object-files ×1
objective-c ×1
opencv ×1
visibility ×1
xcode ×1
xcode3to4 ×1