现有文件的LD错误

时间:2014-05-19 07:38:46

标签: c linux unix makefile xlc

大家好日子。问题是这个。我正在使用makefile来创建一个应用程序。在其中我指定了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

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

2 个答案:

答案 0 :(得分:1)

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

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

我认为不是最好的方式。虽然在这种情况下似乎任何解决方案都会使记录的方式(使用-L和-l键)变得无用。太可惜了。

答案 1 :(得分:0)

问题是库文件名。

当您与-ltest001链接时,链接器将查找名为libtest001.so的文件(不是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