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

时间:2009-01-19 19:24:30

标签: xcode gcc linker

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

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

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

5 个答案:

答案 0 :(得分:14)

如果这个问题完全相同,那么我认为我会分享我必须做的工作才能完成这项工作。

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

can't locate file for: -lcrt0.o

当我尝试这个时。

对我有用的是取代:

-lmylib

/path/to/libmylib.a

注意:-l被删除。

答案 1 :(得分:7)

对你对Eduard Wirch回答的评论作出回应:如果用-l / full / path / to / libhdf5.a替换-lhdf5,你也可以只为这一个库控制静态链接

答案 2 :(得分:3)

我使用Xcode 4.5的案例:

当我将静态C库(使用GNU Autotools编译的第三方库)拖放到项目的框架(Project Navigator > Frameworks)时,链接器似乎认为这是一个动态库并添加了-L -l个标志:

-L/path/to/libfoodir -lfoo

链接失败,因为没有/path/to/libfoodir/libfoo.dylib。 链接器命令可以从以下位置看到:

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

答案 3 :(得分:2)

使用“-static”开关进行链接: GCC link options

答案 4 :(得分:0)

在XCode 11.3.1下,针对MacOS

试图将绝对lib路径添加到2020-01-24 15:13:23,758 INFO [wso2/ftp] - Listening to remote server at 18.156.78.137... 2020-01-24 15:13:24,333 INFO [wso2/file_integration_using_ftp] - Added file path: /clouddir/a1.txt 2020-01-24 15:13:24,415 INFO [wso2/file_integration_using_ftp] - Added file: /clouddir/a1.txt - 12 。但这是行不通的。因此,我将必需的* .a文件(ln -s也可以使用)复制到项目目录中,并且像一个超级按钮一样工作。