繁体   English   中英

链接静态C库时未定义的引用

[英]Undefined reference while linking static C library

在我的最新项目中,我遇到一个奇怪的问题,即对共享库方法的未定义引用。 我在SO上进行搜索,但是我所能找到的只是与C ++相关(外部“ C”)或没有真正帮助。

问题库是我的libosm分支,它使用protobuf为其二进制格式(.osm.pbf)的OpenStreetMap数据生成反序列化代码。 有问题的函数是osmpbf__blob__unpack但这只是我最终使用的第一个函数,因此我怀疑它是一个普遍的问题。

我用nm检查了生成的libosm.a ,该方法在那里并导出了,但是由于某种原因在链接时找不到它。 以下是我目前的标志。 我尝试更改顺序,甚至两次更改所有库(如另一个线程中所建议),但是我总是以未定义的引用结尾。

CFLAGS      = -v -std=c99 -O3 -Wall -Wextra -pedantic
LIBFLAGS    = -losmpbf -lprotobuf-c -lz -lpthread

目前,我对可能的错误感到迷茫,但我认为这可能是一个较小的一般性错误。 自从我使用C以来已经有一段时间了。任何帮助将不胜感激。

干杯,弗洛里安

编辑:这是我完整的Makefile。 我只是使用变量LIBFLAGS命名,因为我使用了自己的小规则,但是对于这种简单情况,似乎应该使用LDLIBS和内置规则。

CC          = gcc
CFLAGS      = -v -std=c99 -O3 -Wall -Wextra -pedantic
LIBFLAGS    = -losmpbf -lprotobuf-c -lz -lpthread

all: main.x

main.x: main.c
    $(CC) $(CFLAGS) $(LIBFLAGS) main.c -o main.x

clean:
    rm -rf *.o main.x

问题是链接器(gcc)与大多数链接器一样,从左到右处理参数。 因此该链接可以看到这些库,但是没有待处理的未解决的引用,因此没有任何反应。

解决方法是将库放在行的最后,而不是放在CFLAGS之后。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM