强制链接到Xcode目标的库的静态链接?

问题描述:

我的Xcode目标链接针对hdf5库(使用Link Binary with Libraries构建阶段)。 libhdf5是使用MacPorts安装的,因此/ opt/local/lib包含库的动态(.dylib)和静态(.a)版本。强制链接到Xcode目标的库的静态链接?

构建的文本输出显示在构建的链接步骤中存在(如预期的)-lhdf5。但是,gcc似乎将动态链接库视为静态链接库。有没有办法强制gcc(通过编译器开关或通过Xcode)静态链接到libhdf5.a?

我发现的唯一解决方案是将libhdf5.a复制到项目(或其他)目录并链接到该副本,从而避免在同一位置有动态和静态版本。

+0

我很想看到一些更新,这个问题的答案并附有关于更新版本Xcode的说明。 – livingtech 2017-11-28 22:30:27

在反应上爱德华Wirch的回答您的评论:您还可以控制静态链接只此一个库,如果通过更换-lhdf5 - l /完整/路径/到/ libhdf5.a

使用“-static”开关连接: GCC link options

+0

这会强制所有库的静态链接,还是它的应用程序可以在每个库的基础上进行控制? – 2009-01-21 06:13:14

+0

实际上它会链接所有静态库。 – 2009-01-21 12:12:08

有这个完全相同的问题,尽管这是一个旧的帖子,我想我会分享我必须做的这个工作。

通常你只是提供开关'-static'给链接器,但是,使用Xcode会导致包括crt在内的所有库都静态链接。我得到了错误:

can't locate file for: -lcrt0.o 

当我试过这个。

这为我工作的事情是取代:

-lmylib 

/path/to/libmylib.a

注:-l被丢弃。

我和Xcode 4.5案例:

当我拖放一个静态C库(第三方库与GNU Autotools的编译)项目的框架(Project Navigator > Frameworks)的链接似乎认为这是一个动态库,并增加了-L -l标志:因为没有/path/to/libfoodir/libfoo.dylib

-L/path/to/libfoodir -lfoo 

链接失败。 链接器命令可以看出:

Log Navigator > select a Build log > select a Link line and expand it 

的连接成功时,我添加完整路径(/path/to/libfoodir/libfoo.a)的连接器设置:

Targets > Build Settings (all) > Other linker flags