gpt4 book ai didi

c - Mac OS X 中的静态库

转载 作者:太空宇宙 更新时间:2023-11-04 06:32:15 24 4
gpt4 key购买 nike

我在 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 make 搜索形式为 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 是提供编译器将在链接时传递给链接器的路径的相关变量。

但是,OS X 的链接器 ld64 无法在两种库都存在的情况下优先使用静态链接而不是动态链接,这意味着您唯一的选择就是将完整路径传递给存档。

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

这就是 -l 在搜索路径并扩展库名称后所做的一切。

关于c - Mac OS X 中的静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19284532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com