繁体   English   中英

Mac OS X中的静态库

[英]Static libraries in Mac OS X

我在Mac OS X中有一个makefile,最后编译的最后一个命令行是:

gcc  count_words.o lexer.o -lfl -o count_words

但它回应:

ld: library not found for -lfl
collect2: ld returned 1 exit status

我发现库libfl.a位于/ opt / local / lib /中,并且将命令行修改为:

gcc count_words.o lexer.o -L/opt/local/lib/ -lfl -o count_words

它可以完美地工作,但是当看到了-l格式的先决条件时,我已经读过了,GNU会搜索libNAME.so格式的文件; 如果找不到匹配项,则搜索libNAME.a。 在这里make应该找到/opt/local/lib/libfl.a并进行最后的操作,链接,但这没有发生。

我尝试使用LD_LIBRARY_PATH,然后意识到在Mac上工作时必须使用DYLD_LIBRARY_PATH,我导出了指向/ opt / local / lib的变量,并尝试再次运行makefile,但此操作无效。 发现另一个导出的名为DYLD_FALLBACK_LIBRARY_PATH的环境变量不起作用。

我该怎么办?

DYLD_LIBRARY_PATH (和其他unices上的LD_LIBRARY_PATH )提供了加载程序的搜索路径,以在运行时解析链接的库。 LIBRARY_PATH是相关LIBRARY_PATH ,用于提供编译器在链接时传递给链接器的路径。

但是,在存在两种库的情况下,OS X的链接器ld64都没有办法比静态链接更喜欢动态链接,这意味着您唯一的选择是无论如何都将完整路径传递给存档。

gcc count_words.o lexer.o /opt/local/lib/libfl.a -o count_words

-l在搜索路径并扩展lib名称后实际上所做的就是这些。

make根本不搜索该库。 make调用执行此操作的其他工具。 ld ,由gcc调用)。您需要做的就是将适当的标志从make传递给gcc 可能这意味着添加

LDFLAGS=-L/opt/local/lib

到Makefile(或直接编辑命令,因为它似乎是在测试过程中完成的),但是很难看到Makefile。

可能未找到-lfl的此问题与有关。 由于某些原因,如果您尝试使用-ll而不是-lfl,则它可以在OS X上运行。另请参见http://linux-digest.blogspot.hk/2013/01/using-flex-on-os-x.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM