C 现有文件上的LD错误
大家好。问题是这个。我正在使用一个makefile来创建一个应用程序。在其中,我指定了LDFLAGS和ldlib(以及其他,但这两个是相关的),并指向现有文件夹中正确的*.a文件。尝试制作应用程序时,我从LD收到以下错误: 0706-006找不到或无法打开库文件:-l test001 ld:open():没有这样的文件或目录 我尝试链接的项目中的每个库都会出现这种情况。makefile中出现的行:C 现有文件上的LD错误,c,linux,unix,makefile,xlc,C,Linux,Unix,Makefile,Xlc,大家好。问题是这个。我正在使用一个makefile来创建一个应用程序。在其中,我指定了LDFLAGS和ldlib(以及其他,但这两个是相关的),并指向现有文件夹中正确的*.a文件。尝试制作应用程序时,我从LD收到以下错误: 0706-006找不到或无法打开库文件:-l test001 ld:open():没有这样的文件或目录 我尝试链接的项目中的每个库都会出现这种情况。makefile中出现的行: appname: appname.o $(CC) -bnoquiet appnam
appname: appname.o
$(CC) -bnoquiet appname.o -o $@ $(LDFLAGS) $(LDLIBS)
在哪里
任何帮助都将不胜感激。提前感谢。问题在于库文件名 当您链接到
-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
#将/a/b/更改为LD_LIBRARY_路径中存在的目录
MY_LIBS=“/a/b/libtest001.so”
mybinary:$(我的OBJS)$(我的库)
复写的副本。。。
/a/b/libtest001.so:test001.so
ln-s test001.so/a/b/libtest001.so
作为临时解决方案,我决定将这些库文件作为对象文件传递给链接器。像这样:
LIBS=$(LIBDIR)/test001.a $(LIBDIR)/test002.a $(LIBDIR)/test003.a $(LIBDIR)/test004.a
...
$(CC) -bnoquiet appname.o -o $@ $(LIBS)
我认为这不是最好的方法。尽管在这种情况下,任何解决方案都会使文档化的方法(使用-L和-L键)变得无用。很遗憾。是否返回包含
test001.so
、test003.so
和test004.so的目录?运行make VERBOSE=1
查看执行的内容是的,它是。使用VERBOSE运行没有什么意义,只是目标是最新的。顺便说一句,这些不是*.so文件,而是*.a文件。对不起,lib文件的名称应该以lib
开头。有没有办法解决这个问题而不必重命名文件?创建符号链接ln-s test001.so libtest001.so
1)这在生成文件中是什么样子?2) 是否真的没有其他方法提供库的全名以使其可见?1)请参阅我答案中的编辑。2) 这取决于链接器。检查文档中链接器的选项。我不熟悉xlc。所以,我正确地理解了:没有一种常见的方法可以链接不符合命名约定的库,即使它具有适当的格式?
LIBS=$(LIBDIR)/test001.a $(LIBDIR)/test002.a $(LIBDIR)/test003.a $(LIBDIR)/test004.a
...
$(CC) -bnoquiet appname.o -o $@ $(LIBS)