对另一个静态库中静态库方法的未定义引用

Undefined reference to static library methods inside another static library

本文关键字:静态 未定义 引用 另一个 方法      更新时间:2023-10-16

未能安装C libzip包装器,因为cmake损坏,我决定自己编译/链接它,因为它足够小。

问题是该LIB具有两个依赖关系zliblibzip。因此,我用这两个,然后使用mingw(Win32(进行.a。然后,我将库链接到程序,然后编译,没有错误。

代码下面:

//lib creation command lines  
    g++ -c libzippp.cpp -o libzippp.o -std=c++11 -lzlib -lzip
    ar rcs libzippp.a libzippp.o
//Programm compilation (simplified)
    $(CC) -o $(EXEC) $(OBJ) $(CLFLAG) -lzip -lzlib -lzippp

之后,我尝试执行基本的libzippp方法,但这里开始错误,因为链接器要求未定义的参考。

未定义的参考来自LIB内部,它们是对" libzip"依赖项的不确定的引用

c:/mingw/bin/../lib/gcc/mingw32/5.3.0/.././..
  /libzippp.a(libzippp.o):libzippp.cpp:(.text+0x236e): 
                                        undefined reference to `_imp__zip_fclose'

但是,如果我简单地使用libzippp作为简单的编译单元编译程序,我可以使用lib而没有任何链接器错误。

下面的示例:

//Compilation works, lib works
    $(CC) -o $(EXEC) $(OBJ) libzippp.h libzippp.cpp $(CLFLAG) -lzip -lzlib

作为我,我不是一个经验丰富的程序员,我以为我只是失败了Lib的创建。这是我第一次制作一个需要其他Lib的LIB,我相信我的错误来自这里。

您需要在-lzip之前移动-lzippp,否则链接器将不会从libzip链接文件:

$(CC) -o $(EXEC) $(OBJ) $(CLFLAG) -lzippp -lzip -lzlib

这就是静态液体的工作方式。