0

今天是个好日子。问题是这样的。我正在使用生成文件来制作应用程序。在其中我指定了 LDFLAGS 和 LDLIBS (以及其他,但这两个是相关的)并指向现有文件夹中的正确 *.a 文件。在尝试制作应用程序时,我从 LD 收到以下错误:

0706-006 找不到或打开库文件:-l test001 ld:open():没有这样的文件或目录

这些发生在我尝试链接的项目中的每个库中。makefile 中它出现的行:

    appname: appname.o
    $(CC) -bnoquiet appname.o -o $@ $(LDFLAGS) $(LDLIBS)

在哪里

    LDFLAGS=-L$(LIBDIR)/
    LDLIBS=-ltest001 -ltest002 -ltest003 -ltest004

任何帮助,将不胜感激。提前致谢。

4

2 回答 2

1

作为一个临时解决方案,我决定将这些库文件传递给链接器,就好像它们是目标文件一样。像这样:

    LIBS=$(LIBDIR)/test001.a $(LIBDIR)/test002.a $(LIBDIR)/test003.a $(LIBDIR)/test004.a
    ...
    $(CC) -bnoquiet appname.o -o $@ $(LIBS)

我认为这不是最好的方法。尽管在这种情况下似乎任何解决方案都会使记录在案的方式(使用 -L 和 -l 键)变得无用。丢人现眼。

于 2014-05-20T04:26:45.770 回答
0

问题是库文件名。

当您使用链接-ltest001器链接时,将查找名为libtest001.so(not test001.so) 的文件。

编辑(在下面的评论中回答问题 1):

在链接步骤中添加对 libtest001.so 的依赖项。还要添加一条规则来创建 libtest001.so。它可能看起来像这样:

# Change /a/b/ to a directory that is present in LD_LIBRARY_PATH
MY_LIBS="/a/b/libtest001.so"

mybinary: $(MY OBJS) $(MY_LIBS)
<tab> CC ...

/a/b/libtest001.so: test001.so
<tab> ln -s test001.so /a/b/libtest001.so
于 2014-05-19T08:39:42.410 回答