让GNU Make定位到正确的库依赖

3

我有一个简单的Makefile,其中一个目标依赖于一个库:

test49: test49.c -lpthread

该二进制文件是使用将 .c 文件转换为可执行文件的隐式规则构建的。

问题在于,我试图进行交叉编译,但是 make 命令将 -lpthread 解释为指向 /usr/lib/libpthread.so,这是非常不正确的。 我已经定义了交叉编译器的路径,使用 CC=/path/to/bin/gcc,因此我会认为它可以找到 -lpthread 应该在 /path/to/lib 中的某个地方,但它没有。


你的LD_LIBRARY_PATH环境变量中有什么内容? - Dan
你如何期望Make猜测/path/to/lib的路径? - Beta
1个回答

2

您可以替换

test49: test49.c -lpthread

使用

test49: test49.c /path/to/lib/lpthread.so

是的,那就是我想到的解决方法,但是像那样硬编码似乎不太对,而且会在以后引起更多问题。 - Michael
你必须告诉make它在哪里。告诉make gcc在哪里并不能告诉它关于机器上“.so”文件的位置。 - Dan
@Michael 你的libpthread是否在非标准位置?你也可以像Dan似乎即将建议的那样,在LD_LIBRARY_PATH环境变量中追加/path/to/lib - user849425
问题的一部分在于单个构建中涉及多个编译器。必须明确指定路径意味着我现在需要为每个工具链和可能依赖的每个库定义一个单独的变量。虽然答案被接受,但目前我已经放弃了让make能够以最小的努力实现这一点的整个想法。 - Michael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接