我使用一个静态库,让我们假设cityhash,它已经构建并安装到/ usr / local / lib。我有一个使用cityhash的文件foo.cxx,例如:

// foo.cxx
u64 get_hash(const std::string &s) {
  return CityHash64(s.data(), s.size());
}


我从中建立一个静态库:

gcc -c foo.cxx  => foo.o
ar rcs libfoo.a foo.a  => libfoo.a


我还有另一个文件bar.cxx,它使用foo.cxx和间接的CityHash函数。我对其进行编译,并与libcityhash.a和libfoo.a链接,如下所示:

gcc -c bar.cxx  => bar.o
gcc -L. -o bar bar.o -lcityhash -lfoo


但这不起作用,链接器抱怨CityHash64是未定义的引用。怎么了?当我不创建静态库libfoo.a时,一切正常。

最佳答案

看到这个。您需要编写链接器参数-lfoo -lcityhash。需要符号的库应该放在提供符号的库之前。

Why does the order in which libraries are linked sometimes cause errors in GCC?

关于c++ - GCC不链接静态库依赖项(makefile),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34823423/

10-10 13:46