大家好日子。问题是这个。我正在使用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
任何帮助将不胜感激。提前谢谢。
答案 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