Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 现有文件上的LD错误_C_Linux_Unix_Makefile_Xlc - Fatal编程技术网

C 现有文件上的LD错误

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

大家好。问题是这个。我正在使用一个makefile来创建一个应用程序。在其中,我指定了LDFLAGS和ldlib(以及其他,但这两个是相关的),并指向现有文件夹中正确的*.a文件。尝试制作应用程序时,我从LD收到以下错误:

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

我尝试链接的项目中的每个库都会出现这种情况。makefile中出现的行:

    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)